此问题的范围仅限于 HotSpot generations .有没有办法以编程方式找出特定实例生活在哪一代。数据如:
- 年轻一代还是老一代?
- 如果年轻,哪个幸存者空间?
- 在 TLAB 内部?哪个线程?
任何技术(例如,BTrace、JVMTI)都可以工作,只要我能做这样的事情:
Object x = new Object();
HotSpotGenerationInfo info = HotSpotGenerationUtil.getInfo(x);
乞丐不能成为选择者,但理想情况下,我还可以了解感兴趣的实例何时从一代转移到另一代在它发生的那一刻(即,基于事件回调 - 不感兴趣在轮询中隐含的延迟和开销。)
对没有理由就说“不”的答案不感兴趣:)
最佳答案
据我所知,不能直接查询一个对象当前在哪个内存池中自 VM 开始使用 JMX 以来运行。如果您在创建对象时另外注意这些计数器,则可以重建自对象所在的池以来和从中是否有 GC。
关于java - 我可以通过编程方式找出实例所在的 GC 代吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4456415/