2010-09-29 3 views
1

Насколько я знаю, GC используется только тогда, когда JVM требуется больше памяти, но я не уверен в этом. Итак, пожалуйста, кто-то предлагает ответ на этот вопрос.Когда сборщик мусора используется в java?

+6

Есть много хороших статей в Интернете о GC. Попробуйте найти некоторые солнечные блоги или белые документы. Те помогут вам больше всего. –

ответ

8

Алгоритм сбора мусора Java, насколько я понимаю, довольно сложный и не такой простой. Кроме того, для GC имеется больше, чем алгоритм, который можно выбрать в момент запуска VM с аргументом, переданным JVM.

Там в FAQ о сборе мусора здесь: http://www.oracle.com/technetwork/java/faq-140837.html

Oracle также опубликовал статью «Tuning Сборка мусора с 5.0 Java [TM] Virtual Machine», который содержит глубокое понимание сбора мусора, и, вероятно, поможет вам лучше понять: http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

+0

Часто задаваемые вопросы ссылка имеет трюк. –

2

Спецификации JVM и java ничего не говорят о том, когда происходит сбор мусора, поэтому полностью зависит от JVM-разработчиков, какие политики они хотят использовать. У каждой JVM, вероятно, должна быть документация о том, как она обрабатывает GC.

В общем, большинство JVMs вызывают GC, когда выделение памяти подталкивает общее количество выделенной памяти выше некоторого порогового значения. Могут быть многоразмерные уровни gc (полные или частичные/поколение), которые встречаются при разных пороговых значениях.

0

В старые времена сборщик мусора был эмпирическим по своей природе. На каком-то заданном интервалах или на основе определенного условия они будут пинать и исследовать каждый из объектов.

Коллекторы современных дней умнее в том смысле, что они дифференцируются в зависимости от того, что объекты отличаются продолжительностью жизни. Объекты дифференцируются между объектами молодого поколения и объектами, использующими объекты генерации.

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

1

Сбор мусора умышленно неопределенно описан в Спецификации языка Java, чтобы дать разработчикам JVM наилучшие условия работы для обеспечения хороших сборщиков мусора.

Следовательно, сборщики мусора и их поведение чрезвычайно зависят от поставщика.

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

Самый интересный способ исследовать сборку мусора - запустить jvisualvm в Sun 6 JDK. Это позволяет вам видеть много, много внутренних вещей, которые важны для сбора мусора.

https://visualvm.dev.java.net/monitor_tab.html (но новая версия имеет много больше)

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