在我的应用程序中,我看到一些对象不断传到旧代:
- 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 :(得分:0)
我不知道任何按期限分解实例的选项
但是,如果我们询问哪些对象活到16岁,那么这就是升级到老一代的对象。可以使用-XX:+PrintClassHistogram
跟踪。完整GC之后和下一个完整GC之前的直方图差异将显示哪些对象在年轻的集合中流入旧的gen。
使用支持快照及其比较的内存分析器可以提供类似的洞察力。
对于java 9的统一日志记录,等效选项为-Xlog:classhisto*=trace