这是我在堆栈溢出论坛中的第一篇文章。我们最近遇到了一些Java OOME问题,并使用jvisualvm,yourkit和eclipse mat工具来识别和修复一些问题......
在分析过程中观察到的一个行为是,当我们使用jconsole或jvisualvm手动创建堆转储时,生成堆转储后,jvm中使用的堆大小会急剧减少(从1.3 GB到200 MB)。 有人可以就这种行为提出建议吗?这是一个伪装的恩惠,因为每当我看到使用的堆大于1.5GB时,我执行一个manaul GC并且系统返回到较低的使用的堆大小数字,导致没有jvm重启。
让我知道任何其他细节
感谢 大师
答案 0 :(得分:1)
当您使用JConsole创建转储文件时,有2个参数:第一个是要生成的文件名(完整路径),第二个(默认为true)表示您是否要在执行之前执行gc转储。如果在转储之前不需要完整的gc,请将其设置为false
答案 1 :(得分:0)
这是一个老问题,但我在问自己的新问题时发现了这个问题,所以我想我会回答它。
生成堆转储时,JVM在生成堆转储之前执行System.gc()操作,堆转储正在收集未引用的对象并有效地降低堆利用率。我实际上正在寻找一种方法来禁用该系统GC,以便我可以检查在我的JVM中搅拌的垃圾对象。