2016-06-13 8 views
0

Я пытаюсь понять, как работает сборщик мусора. Я ясно на следующие моменты:Когда JVM запускает сборку мусора?

  1. JVM будет вызывать незначительные GC, когда не выделять объекты на молодого поколения.
  2. пункт Список

JVM будет вызывать полный GC (как второстепенный + основной GC), когда куча полна.

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

Означает ли это, что эти объекты останутся в области кучи молодого/старого поколения до тех пор, пока не произойдет GC?

Мои материалы для чтения

+1

Какой алгоритм GC вы имеете в виду? Каждый алгоритм имеет свой собственный порог для запуска основного GC. https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ – kosa

+0

Предположим, если это параметр по умолчанию? Параллельный GC? – youcanlearnanything

+0

Это может помочь: https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html#parallel_collector_ergonomics – kosa

ответ

1

он по-прежнему остается в старом поколении, а общее использование кучи увеличивается до тех пор, пока не появится полный/основной GC. Команда ops отслеживает использование кучи, и они обеспокоены растущей кучей.

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

Информация может быть извлечена, например, из файлов журнала GC.

JVM запускает полный GC (как незначительный, так и основной GC), когда куча заполнена.

Это не обязательно так. Решения о запуске коллекции основаны на эвристике, которая учитывает различные цели, такие как время паузы и пропускная способность.

+0

Да, пространство кучи старого поколения растет с каждым днем, но на нем еще нет серьезного GC. – youcanlearnanything

+0

Могу ли я запустить основной GC для запуска через WebLogic и взять кучу кучи до/после основного основного GC? Должен ли я включать параметр live при сбросе с помощью jmat? то есть jmat -dump: live format = b, file = youcanlearnanything

+0

в этом случае, должен ли я быть обеспокоен растущей кучей старого поколения? я боюсь, что происходит утечка памяти. – youcanlearnanything

1

Да, если нет GC, то объекты будут существовать в куче.

Фактически даже после того, как объект GC будет существовать в куче, если он находится в молодости, до тех пор, пока он не будет перезаписан, в случае старого он зависит от алгоритма, но это интересно только с точки зрения безопасности.

+0

, так как большинство объектов недолговечны и живут в куче молодого поколения, небольшие GC будут происходить часто, но для кучи старого поколения, не было бы начинает накапливаться до тех пор, пока он не будет полностью заполнен, и это вызовет основной/полный GC на его собственной? – youcanlearnanything

Смежные вопросы