Java 如何分析哪一代中的对象?

Java 如何分析哪一代中的对象?,java,garbage-collection,jvm-hotspot,jmap,Java,Garbage Collection,Jvm Hotspot,Jmap,我有一个长时间运行(多天)的应用程序,其中包含一些对象,我希望这些对象在被垃圾收集之前可以停留不同的时间。假设有四类: 非常短暂(否,没有简单的方法获取单个对象的生成信息。事实上,如果您请求“活动”对象,这将触发完整的GC并将所有对象放入旧的生成中(因此现在您知道所有对象的位置,但不知道它们的位置) 在完整GC中幸存下来的对象可能是旧一代的对象,因此如果您的系统每5分钟执行一次完整GC,则任何持续时间超过该时间的对象都是相同的 您可以做的最好的事情是尽量减少丢弃的对象(使用内存探查器提供帮助)这

我有一个长时间运行(多天)的应用程序,其中包含一些对象,我希望这些对象在被垃圾收集之前可以停留不同的时间。假设有四类:


  • 非常短暂(否,没有简单的方法获取单个对象的生成信息。事实上,如果您请求“活动”对象,这将触发完整的GC并将所有对象放入旧的生成中(因此现在您知道所有对象的位置,但不知道它们的位置)

    在完整GC中幸存下来的对象可能是旧一代的对象,因此如果您的系统每5分钟执行一次完整GC,则任何持续时间超过该时间的对象都是相同的


    您可以做的最好的事情是尽量减少丢弃的对象(使用内存探查器提供帮助)这将提高GC性能并减少它们发生的频率。在极端的例子中,您可以使用堆外内存,这很难使用,但几乎没有堆。如果您有很多GB的数据,尤其有用。

    鉴于VisualVM和VisualGC插件确实显示了各个代中的大小,我认为可能会有e另一种方法。没有这样的运气?我不知道。我怀疑干扰系统的开销使得它很难有意义。