Можно ли отслеживать частоту "Full GC" в JMX (на HotSpot)? - PullRequest
7 голосов
/ 08 января 2011

Я хочу контролировать частоту полного GC в JMX.MBean выставляет счет GC.(ср. http://download.oracle.com/javase/1.5.0/docs/api/java/lang/management/GarbageCollectorMXBean.html - java.lang: type = GarbageCollector, name =).

Проблема в том, что MBean не различает младший и полный gc.

У кого-то есть идея?

Спасибо.

Арно

Ответы [ 2 ]

8 голосов
/ 02 февраля 2011

Я не совсем уверен в этом, но я предполагаю, что сборщик мусора, который контролирует все пулы памяти (по крайней мере, для Old Gen), - тот, который используется для основного gc. например: у меня есть JVM, работающая с этими двумя сборщиками:

  • PS MarkSweep
    • MemoryPoolNames: PS Eden Space, PS Survivor Space, PS Old Gen, PS Perm Gen
    • КоллекцияСчет: 68
  • PS Scavenge
    • MemoryPoolNames: PS Eden Space, PS Survivor Space
    • КоллекцияСчет: 2690

Принимая это во внимание, я бы сказал, PS Scavenge используется для младшего gc и PS MarkSweep для основного gc.

ОБНОВЛЕНИЕ (на основе комментария @ajeanson, спасибо за ваш отзыв):

Фактически, приведенный мною пример был взят из информации, представленной в MXBeans-компоненте JVM, который я использовал. Как вы упомянули, это алгоритмы GC, и имя, которое использует MXBean для GC, основано на алгоритме, который использует GC. Я искал больше информации об этом; в этой статье http://download.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html, гласит следующее:

Виртуальная машина Java HotSpot определяет два поколения: молодое поколение (иногда называемый "детской") и старое поколение. Молодой поколение состоит из «райского пространства» и два "пространства для выживших". ВМ изначально присваивает все объекты Пространство рая, и большинство объектов умирает там. Когда он выполняет незначительную сборку, ВМ перемещает любые оставшиеся объекты из райского пространства к одному из выжившие места. ВМ перемещает объекты которые живут достаточно долго в живых пробелы в "штатное" пространство в старое поколение Когда наёмный поколение заполняется, есть полный GC, который часто намного медленнее, потому что он включает в себя все живые объекты. постоянное поколение держит все отражающие данные виртуальной машины сам, такой как класс и метод объекты.

Если взглянуть на свойство collectionCount в MXBeans, то в случае с моим сборщиком «PS MarkSweep» (управляющим пулом «Старое поколение») количество сборок, по-видимому, увеличивается только тогда, когда я получаю полный сборщик мусора в подробном виде. выход. Я могу ошибаться, и, возможно, в некоторых случаях этот Collector выполняет также незначительный сборщик мусора, но мне нужно будет выполнить больше тестов, чтобы быть полностью уверенным в этом. Пожалуйста, дайте мне знать, если кто-то узнает что-то еще, или у вас есть более конкретная информация по этому вопросу, поскольку я очень заинтересован в этом.

0 голосов
/ 20 января 2011

это действительно ... взглянуть на имена, например, ParNew, ConcurrentMarkSweep и т. Д. Некоторые имена для младшего gc, некоторые для полного gc,

...