2016-07-21 3 views
2

Я не вижу, чтобы какой-либо основной GC запускался на моем сервере приложений. Это потому, что я назначил больше памяти, которая составляет 4 ГБ. И максимум до 1 ГБ. Я просто хочу посмотреть, как будет проходить полный GC.Java, чтобы ввести временные объекты

Чтобы запустить полный GC, мне нужно заполнить кучную память, которая невозможна во время работы моего приложения. Итак, планирование размещения некоторого временного объекта при запуске сервера и заполнение кучи в аренду 3.5 ГБ.

Может кто-нибудь помочь мне, чтобы подтолкнуть меня?

Заранее спасибо

+0

Ermmm .... использовать 'new' для выделения большого массива. Или выделите список и добавьте к нему много элементов. –

+0

Что вы пытаетесь достичь? – bradimus

+0

@bradimus Я просто хочу, чтобы на моем сервере приложений произошел полный GC, без изменения каких-либо параметров ... – sitakant

ответ

0

Вот требуемая сущность, где указанные сценарии были реплицированы и протестированы с использованием visualVM.

https://gist.github.com/cooligc/eb9ba490e14a10d939147bd9c914afdd

+0

Пожалуйста, отредактируйте ваш вопрос, а не добавьте ответ – AlBlue

+0

Что вы хотите изменить в вопросе @AlBlue? – sitakant

0

Вы можете вызвать GC из кода по: System.gc() https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#gc()

+3

Не гарантируется. Не гарантируется запуск Full GC. –

+0

@StephenC Я согласен с вами. – sitakant

+0

Еще одна вещь, в моей кодовой базе во время работы, я даже не могу думать о том, чтобы поместить этот код. – sitakant

-2

Когда GC срабатывает это только очищает объекты, которые не имеют доступа к каким-либо более (их ссылки указывают null); Поэтому убедитесь, что присвоить NULL для ссылок объектов после завершения их

SomeObject obj = new SomeObject(); 
    /* 
    use obj 
    */ 
    obj = null; 

Вот как GC знает, что объект должен быть очищен с помощью.

Вы также можете взглянуть на мягкую ссылку и слабую ссылку.

+0

Сколько объектов мне нужно создать и ссылаться на них? И еще одно: если я ссылаюсь на объект на null, то это будет собрано Minor GC. Если он собирается нанимать, его можно очистить с помощью основного GC. – sitakant

+0

Обычно вам не нужно присваивать значение null. Если переменная, ссылающаяся на объект, объявлена ​​в методе, и никакая другая переменная не ссылается на этот объект, объект станет недоступным, как только метод закончится. –

0

Вы можете выполнить

jmap -histo:live {pid} 

и это вызовет полное собрание в любом приложении Java.

1

Вот простой код для временного объекта creatation. Надеюсь, это может вам помочь.

for(int i=0;i<100000;++i){ 
map.put(UUID.randomUUID(),UUID.randomUUID()); 
} 

объявить карту глобальной переменной и по каждому запросу выполнить этот цикл.