在我的应用程序中,我看到一些对象不断进入旧一代:
- 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 中幸存下来的对象是谁的最佳方法是什么?
应用程序运行一个小时,因此这不是预热期。
最佳答案
我不知道有任何选项可以按任期年龄来分割实例
但是如果我们问哪些对象能活到 16 岁,那么这些对象就会被提升到老年代。可以使用-XX:+PrintClassHistogram
进行追踪。比较完整 GC 之后和下一次完整 GC 之前的直方图将显示哪些对象在其间的年轻集合中渗入了旧代。
使用支持快照及其比较的内存分析器可以提供类似的见解。
对于 java 9 的统一日志记录,等效选项是 -Xlog:classhisto*=trace
关于java - 如何确定哪些对象在次要 GC 中幸存下来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38327902/