2016-07-12 2 views
1

В моем приложении я вижу, что некоторые объекты продолжают поступать на старый ген:Как выяснить, какие объекты сохранился п второстепенной GC

- age 1: 23911192 bytes, 23911192 total 
- age 2:  627816 bytes, 24539008 total 
- age 3:  60344 bytes, 24599352 total 
- age 4:  19488 bytes, 24618840 total 
- age 5:  12864 bytes, 24631704 total 
- age 6:  10632 bytes, 24642336 total 
- age 7:  11472 bytes, 24653808 total 
- age 8:  10944 bytes, 24664752 total 
- age 9:  39480 bytes, 24704232 total 
- age 10:  10288 bytes, 24714520 total 
- age 11:  8072 bytes, 24722592 total 
- age 12:  9976 bytes, 24732568 total 
- age 13:  13112 bytes, 24745680 total 
- age 14:  8928 bytes, 24754608 total 
- age 15:  8600 bytes, 24763208 total <-- who are these guys? 

Итак, я хотел бы спросить, что это лучший способ, чтобы выяснить, кто являются те объекты, которые пережили 15 малых GC?

Приложение работает в течение часа, поэтому не прогревается период.

+0

почему это важно? это всего лишь небольшая фракция, это не похоже на то, что это вызовет чрезмерное количество старых коллекций. – the8472

+0

@ the8472, это может не иметь большого значения. Мне просто интересно, что происходит – evgeniy44

ответ

0

Я не знаю ни одного варианта, который расщепляет экземпляры, tenuring возраст

Но если мы спросим, ​​какие объекты живут в возрасте до 16 лет, а не то, что это объекты, которые получают продвигаемые к старому поколению. Что можно проследить с помощью -XX:+PrintClassHistogram. Разделение гистограмм после полного GC и до следующего полного GC покажет вам, какие объекты попали в старый ген в молодых коллекциях между ними.

Использование профайлера памяти, который поддерживает моментальные снимки и их сравнение, может обеспечить аналогичное понимание.

Для Java 9 унифицированный регистрации эквивалентного варианта является -Xlog:classhisto*=trace

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