我有一个长时间运行(多天)的应用程序,我希望它们可以在垃圾收集之前保持不同的时间长度。让我们说有四个类别:
为了帮助调优,我想找到一种方法,使用Java 6 Hotspot VM检查实际数据进入终身代。使用jmap生成HPROF文件似乎不包含世代信息。是否有另一种获取此信息的方式?
答案 0 :(得分:0)
不,没有简单的方法来获取单个对象的生成信息。事实上,如果你要求“实时”对象,这将触发一个完整的GC并将所有对象放入旧一代(所以现在你知道所有对象在哪里,但不知道它们在哪里)
在完整的GC中存活的对象很可能是老一代的,所以如果你的系统每5分钟完成一次完整的GC,那么任何持续时间都比这更长的东西都是一样的。
您可以做的最好的事情是最小化丢弃的对象(使用内存分析器来帮助)这将提高GC性能并减少它们发生的频率。在极端的例子中,您可以使用难以使用的off堆内存,但不使用堆旁边的堆内存。如果你有很多GB数据,esp很有用。