Программное уведомление о событиях GV JVM - PullRequest
7 голосов
/ 04 декабря 2010

Я хотел бы отследить, сколько времени потрачено в GC и сколько памяти было собрано, но не анализируя журналы GC (т. Е. Анализируя то, что я получил от -XX: + PrintGCWh независимо).

Я обнаружил, что могу использовать Sun ManagementFactory, чтобы получить объект GarbageCollectorMXBean, который может дать мне некоторый объект GCInfo, содержащий информацию о памяти, но у меня нет гарантии, что я смогу собрать все GC через это среднее.

Кто-нибудь знает способ сделать это в коде?

Ответы [ 2 ]

4 голосов
/ 04 декабря 2010

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

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

0 голосов
/ 04 декабря 2010

Учитывая набор инструментов для получения этой информации, вам лучше использовать их для анализа поведения GC и оптимизации для него. например используя профилировщик памяти.

Ваша проблема в том, что информация не очень полезна, если она не указывает на решение проблемы. (Что вы можете исправить)

...