Нахождение использования памяти в Java

Вы можете использовать правила условного добавления, не имеющие изображения в базе данных

Add this in model

public function notHavingImageInDb()
{
    return (empty($this->image))?true:false;
}

Это запрос правила валидации

public function rules()
{
    $user = User::find(Auth::id());
    $rules =  [
       'name' =>'required|max:100',
        'image' =>'image',
         ];

    if ($user->notHavingImageInDb()){
        $rules['image'] = 'required|image';
    }
    return $rules;
 }

Не забыли импортировать аутентификацию и пользовательскую модель, т.е. [ 116]

 use App\User;
 use Auth;

для более подробной информации нажмите здесь

6
задан Peter Lawrey 12 April 2016 в 08:42
поделиться

7 ответов

Просто примечание стороны: Runtime.freeMemory() не указывает объем памяти, который это оставляют выделения, это - просто объем памяти, это свободно в в настоящее время выделяемой памяти (который первоначально меньше, чем максимальная память, которую VM настроен для использования), но растет со временем.

При запуске VM, макс. память (Runtime.maxMemory()) просто определяет верхний предел памяти, которую VM может выделить (настраиваемое использование-Xmx опции VM). Общая память (Runtime.totalMemory()) начальный размер памяти, выделенной для процесса VM (настраиваемое использование-Xms опции VM), и динамично вырастет каждый раз, когда Вы выделяете больше, чем в настоящее время бесплатная часть его (Runtime.freeMemory()), пока это не достигает макс. памяти.

Метрика, которой Вы интересуетесь, является памятью, доступной для дальнейшего выделения:

long usableFreeMemory= Runtime.getRuntime().maxMemory()
    -Runtime.getRuntime().totalMemory()
    +Runtime.getRuntime().freeMemory()

или:

double usedPercent=(double)(Runtime.getRuntime().totalMemory()
    -Runtime.getRuntime().freeMemory())/Runtime.getRuntime().maxMemory()
14
ответ дан 8 December 2019 в 02:46
поделиться

Обычный способ обработать этот вид вещи состоит в том, чтобы использовать WeakReferences и SoftReferences. Необходимо использовать и - слабая ссылка означает, что Вы не держите несколько копий вещей, и мягкие ссылки означают, что GC зависнет на вещи, пока это не начнет исчерпывать память.

Если необходимо сделать дополнительную очистку, то можно добавить ссылки на очереди и переопределить методы уведомления очереди для инициирования очистки. Это - все хорошее развлечение, но действительно необходимо понять то, что делают эти классы.

7
ответ дан 8 December 2019 в 02:46
поделиться

Совершенно нормально для JVM подойти к 100%-му использованию памяти и им назад, чтобы сказать 10% после GC и сделать это каждое несколько второе.

Вы не должны должны быть пытаться управлять памятью таким образом. Вы не можете сказать, сколько памяти сохраняется, пока полный GC не был выполнен.

Я предлагаю, чтобы Вы разработали то, чего Вы действительно пытаетесь достигнуть и посмотреть на проблему иначе.

5
ответ дан 8 December 2019 в 02:46
поделиться

Требования, которые Вы упоминаете, являются четким противоречием с тем, как Сборка "мусора" работает в JVM.

из-за поведения JVM будет очень трудно предупредить Вас пользователи корректным способом. В целом остановка управления базой данных Альса, чистка материала и запуск снова действительно не являются способом пойти.

Позвольте JVM сделать то, что она, как предполагается, делает, обработайте всю память, связанную для Вас. Современные поколения JVM очень хороши в нем, и с некоторой подстройкой параметров GC Вы получите намного более чистую память, обрабатывающую затем принуждение вещей сами

Статьи как http://www.kodewerk.com/advice_on_jvm_heap_tuning_dont_touch_that_dial.htm упоминают за и против и предлагают хорошее объяснение того, что VM делает для Вас

4
ответ дан 8 December 2019 в 02:46
поделиться

Я только использовал первый метод для подобной задачи, и это было в порядке.

Одна вещь, которую необходимо отметить для обоих методов, состоит в том, чтобы реализовать некоторый debouncing - т.е. после того как Вы распознаете удар 70% памяти ожидайте в течение минуты (или любое другое время, которое Вы находите соответствующими) - GC может работать в то время и очистить большую память.

При реализации Runtime.freeMemory () график в системе, Вы будете видеть, как память постоянно идет вверх и вниз, вверх и вниз.

2
ответ дан 8 December 2019 в 02:46
поделиться

Изучите JConsole. Это изображает в виде графика информацию, в которой Вы нуждаетесь так, это - вопрос адаптации этого к Вашим потребностям (учитывая, что Вы работаете на Sun Java 6).

Это также позволяет Вам отсоединять процесс слежки от того, на что Вы хотите посмотреть.

0
ответ дан 8 December 2019 в 02:46
поделиться

VisualVM немного лучше, чем JConsole, потому что он дает хорошее визуальное представление сборщика мусора.

1
ответ дан 8 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: