我的Java内存在哪里?

时间:2011-09-12 10:13:49

标签: java memory memory-leaks

我正在运行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?我该如何诊断和修复它?

2 个答案:

答案 0 :(得分:0)

什么是堆自由比率?您使用默认的70%和40%。也许,等待下一次gc运行时会收集垃圾对象。也许java进程已经为自己分配了额外的内存(读取堆自由比率)。

也许Tuning Garbage Collection parameters in Java中提到的问题/答案/评论会提供一些帮助。

答案 1 :(得分:-2)

请检查此eclipse plugin以进行内存分析。安装完成后,它会提供不同的视图。在一个particular view中,它显示了各个对象使用的内存。这将帮助您精确定位使用内存的对象。

编辑:我想我错过了非堆部分。