2

这是我在堆栈溢出论坛的第一篇文章。我们最近遇到了一些 Java OOME 问题,并且使用 jvisualvm、yourkit 和 eclipse mat 工具能够识别和修复一些问题......

在分析过程中观察到的一种行为是,当我们使用 jconsole 或 jvisualvm 手动创建 heapdump 时,jvm 中使用的堆大小在生成 heapdump 后显着减少(从 1.3 GB 到 200 MB)。有人可以就这种行为提出建议吗?这是一个变相的福音,因为每当我看到已用堆大小大于 1.5GB 时,我都会执行手动 GC,系统会恢复到较低的已用堆大小,从而导致 jvm 不会重新启动。

让我知道任何其他详细信息

谢谢大师

4

2 回答 2

1

当您使用 JConsole 创建转储文件时,有 2 个参数:第一个是要生成的文件名(完整路径),第二个(默认为 true)表示您是否要在进行转储之前执行 gc。如果您在转储前不想要完整的 gc,请将其设置为 false

于 2013-01-07T19:33:23.680 回答
0

这是一个老问题,但我在提出自己的新问题时发现了它,所以我想我会回答它。

当您生成堆转储时,JVM 在生成堆转储之前会执行 System.gc() 操作,这会收集未引用的对象并有效地降低堆利用率。我实际上正在寻找一种方法来禁用该系统 GC,以便我可以检查在我的 JVM 中搅动的垃圾对象。

于 2013-01-02T19:35:04.853 回答