2012-08-30 37 views
0

有没有办法,看看哪些对象在堆中的OldGen一部分而存在?我知道如何查看堆中的所有对象(jmap),但我只想看到PSOldGen中的对象。Java - 哪些对象存在于PSOldGen中?

有没有办法做到这一点?

编辑:说明我的问题&需要

我的应用程序需要非常大的堆(它是用来生产与-XmX30G)。 我们每〜20分钟后,该应用程序挂起〜由于完整垃圾回收20秒问题。我想看看有什么东西能够存活下来,足够的时间移动到老根,然后才能收集垃圾。 我应该采取哪种方法?

感谢

回答

0

,你必须使用好的分析工具像JProfilerJprobe有更深入的了解您的堆。你可以检查没有被垃圾收集并占据堆的物体。慢慢收集不到的物体不断移动到老旧的空间。你不能检查物体的年龄,并且可以识别具有较高年龄的物体将会在旧有空间中。

+0

我怎么看到这个JProfiler的?我如何看待对象年龄?哪个对象移动到老根? – duduamar

+0

您必须阅读供应商特定指南才能看到它,但是其中大部分都带有可提供所有这些信息的流畅UI。 – ajay

0

您有什么问题?有更大的堆大小或更长的GC暂停?

如果它是关于高堆的大小,你可以只是JMAP一个完整的GC检查后堆的对象和检查,如果你需要他们。如果还有额外的对象,您仍然可以参考,您可以相应地更改代码。

如果你的问题是由于较长的GC暂停,你可以采取JMAP输出之前和一个完整的GC之后,看到那些应该给被垃圾回收在该周期什么对象的详细信息输出的差异。您可以追踪这些对象创建的起源并避免这种情况,可能会通过对象池等等。

相关问题