18

请告诉我这些选项的目的。谷歌搜索后我认为: MinHeapFreeRatio 告诉“指定的最小百分比的空间将确保在 GC 后在堆​​内存中空闲”,而 MaxHeapFreeRatio 告诉“在 GC 后不超过指定百分比的空间将在堆内存中空闲”[如果有超出指定百分比的可用内存,这些内存将返回给操作系统]

当我尝试将这些选项都设置为 10 时,即使有超过 80% 的可用堆内存,它也没有释放回操作系统。

细节:

Java HotSpot(TM) 64 位服务器 VM(1.5.0_15-b04,混合模式)ParallelGC(也称为吞吐量收集器,它是服务器类 VM 中的默认收集器)我指定 -Xms50M 和 -Xmx1000M 作为 jvm 参数操作系统:windows 7 专业版(8 GB 内存 64 位操作系统)

注意:我也尝试过使用 SerialGC,那些最小和最大无堆比率选项被忽略了。

4

2 回答 2

7

参数 -XX:MinHeapFreeRatio 和 -XX:MaxHeapFreeRatio 参数的最佳解释可以在 oracle 垃圾文档中找到:

https://docs.oracle.com/javase/10/gctuning/factors-affecting-garbage-collection-performance.htm

-XX:MinHeapFreeRatio=40
-XX:MaxHeapFreeRatio=70

使用这些选项,如果一代中的可用空间百分比低于 40%,则该代会扩展以保持 40% 的可用空间,直至该代的最大允许大小。类似地,如果空闲空间超过 70%,则生成会收缩,因此只有 70% 的空间是空闲的,这取决于生成的最小大小。

我以这种方式将它与 G1GC 结合起来:

-XX:+UseG1GC -XX:MinHeapFreeRatio=2 -XX:MaxHeapFreeRatio=10

有了这个结果:

随时间变化的堆大小与解释的参数

于 2021-07-07T18:03:29.977 回答
2

Java很少将内存释放回操作系统。

一般来说,随着时间的推移,应用程序会使用更多的内存而不是更少。你确定你的记忆力如此有限以至于你需要这个吗?您确定要检查常驻内存而不是虚拟内存大小,在您的情况下,虚拟内存大小始终约为 1.2 GB。

于 2013-04-17T11:48:18.817 回答