如何确定哪些对象在n次GC中存活

时间:2016-07-12 11:40:39

标签: java garbage-collection heap dump

在我的应用程序中,我看到一些对象不断传到旧代:

- 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中存活的对象是谁?

申请工作一小时,所以这不是一个热身期。

1 个答案:

答案 0 :(得分:0)

我不知道任何按期限分解实例的选项

但是,如果我们询问哪些对象活到16岁,那么这就是升级到老一代的对象。可以使用-XX:+PrintClassHistogram跟踪。完整GC之后和下一个完整GC之前的直方图差异将显示哪些对象在年轻的集合中流入旧的gen。

使用支持快照及其比较的内存分析器可以提供类似的洞察力。

对于java 9的统一日志记录,等效选项为-Xlog:classhisto*=trace