减少JVM中未使用的堆大小

时间:2016-07-10 19:24:45

标签: java intellij-idea jvm heap heap-memory

类似地询问herehere,但JVM参数的更改都没有引出我同样的解决方案。我只是想减少我的JVM未使用的堆大小,以便它更接近地反映实际使用情况(将其释放到操作系统)。我一直在使用YourKit来分析内存使用情况,它通常如下所示:

enter image description here

我在Windows 7 64位,8 GB RAM上运行intellIj IDEA Community Edition 64位。我已根据上面链接中提到的建议编辑了.vmoptions文件:C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 14.1.5\bin\idea64.exe.vmoptions。第一个链接的答案实际上是错误的/过时的,但有两条评论链接到找到herehere的文章似乎很有希望。问题是,我已经尝试了所提到的所有不同的垃圾收集器,并且仍然看到上面显示的类似(不完全相同)的堆大小。

如何减少分配的堆大小(橄榄绿)以更准确地反映实际使用情况(蓝色)?垃圾收集不应该降低堆大小,而不是像目前那样增加它。

我尝试按如下方式配置idea64.exe.vmoptions:

根据上面的最后一个链接,它声称

  

只有串行GC和G1将未使用的内存释放到操作系统

它甚至直观地显示了堆的减少方式。然而,我没有运气,并尝试了以下所有方面:发生了什么?

-XX:+UseSerialGC

-XX:-UseSerialGC

-XX:+UseG1GC

-XX:-UseG1GC

Both of the above together, with and without ("+/-")

-XX:-UseAdaptiveSizePolicy
-XX:-UseParallelGC

-XX:UseConcMarkSweepGC

-Xms128m
-Xmx750m
-XX:MaxPermSize=350m
-XX:ReservedCodeCacheSize=225m
-XX:+UseG1GC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djsse.enableSNIExtension=false

-server
-Xms128m
-Xmx512m
-XX:MaxPermSize=250m
-XX:ReservedCodeCacheSize=150m
-XX:UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true

修改

重申为什么这不是重复,另一个“答案”是5岁,甚至没有提到任何现代垃圾收集器。唯一有用的部分是注释中的两个链接,指向要使用的不同JVM参数,所有这些都是我尝试过但没有成功的。我已经完全尝试了这些解决方案,但仍然没有结果。这正是我敦促你把它视为独特的原因,因为其他人可能会遇到同样的循环挫折。

1 个答案:

答案 0 :(得分:2)

据我所知,这些仅适用于编辑本身。您应该在以下位置插入这些设置:

  

运行>编辑配置...> VM选项

如果将选项置于程序vmoption中,则选项应该有效。