我正在运行Ant或Eclipse的JUnit测试套件。 PermGen限制为200 MB,堆积为1000 MB。
Java VisualVM将分配的PermGen报告为200 MB,并将堆分配为350 MB。那是550 MB。
但是,此进程的总虚拟集大小为2.5 GB,常驻集大小为1.8 GB。我知道应该有一些开销,但如果PermGen和堆是0.5 GB并且进程使用1.8 GB,那么缺少1.3 GB?我该如何诊断和修复它?
答案 0 :(得分:0)
什么是堆自由比率?您使用默认的70%和40%。也许,等待下一次gc运行时会收集垃圾对象。也许java进程已经为自己分配了额外的内存(读取堆自由比率)。
也许Tuning Garbage Collection parameters in Java中提到的问题/答案/评论会提供一些帮助。
答案 1 :(得分:-2)
请检查此eclipse plugin以进行内存分析。安装完成后,它会提供不同的视图。在一个particular view中,它显示了各个对象使用的内存。这将帮助您精确定位使用内存的对象。
编辑:我想我错过了非堆部分。