减少JVM中未使用的堆大小

u0njafvf  于 2022-11-07  发布在  其他
关注(0)|答案(1)|浏览(154)

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

我正在运行intellIj IDEA Community Edition 64位,在Windows 7 64位,8 GB内存上。我已经编辑了.vmoptions文件,在这里找到:C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 14.1.5\bin\idea64.exe.vmoptions与上面的链接中提到的建议。第一个链接的答案实际上是错误的/过时的,但2个评论链接到的文章发现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参数,我已经尝试过所有这些参数,但都没有成功。我已经完全尝试过这些解决方案,这就是为什么我敦促你把这件事看作是独一无二的,因为其他人可能也在经历同样的循环挫折。

a2mppw5e

a2mppw5e1#

据我所知,这些只适用于编辑器本身。你应该在下面的地方插入这些设置:
运行〉编辑配置...〉虚拟机选项
如果将这些选项放置在程序的vmoption中,它们应该可以正常工作。

相关问题