0

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

有没有办法这样做?

编辑:关于我的问题和需求的解释

我的应用程序需要非常大的堆(它在生产中使用 -XmX30G)。我们遇到的问题是,由于完全垃圾收集,应用程序每 20 分钟就会挂起约 20 秒。我想看看有哪些对象可以存活足够的时间移动到旧代,然后才能收集垃圾。我应该采取哪种方法?

谢谢

4

2 回答 2

0

你必须使用像 JProfilerJprobe这样好的分析工具来更深入地了解你的堆。您可以检查没有被垃圾收集并占用堆的对象。没有被缓慢收集的对象继续移动到旧代空间。您无法检查对象年龄,并且可以识别具有更高年龄的对象将在旧代空间中。

于 2012-08-30T06:39:07.067 回答
0

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

如果它是关于更高的堆大小,您可以在使用 jmap 进行完整 GC 之后检查堆中的对象,并检查是否需要它们。如果您仍然指的是额外的对象,您可以相应地更改代码。

如果您的问题是由于较长的 GC 暂停引起的,您可以在完整 GC 之前和之后获取 jmap 输出,并查看这些输出的差异,这些输出应该提供在该循环中被垃圾收集的对象的详细信息。您可以跟踪这些对象创建的起源并避免这种情况,可能是通过对象池等。

于 2012-08-31T20:11:42.060 回答