Java虚拟机堆调整参数

时间:2013-09-13 02:48:50

标签: java performance heap

在不设置-Xmx的情况下仅设置-Xms会产生什么影响 例如。 java -Xms 2048m?为-Xms设置较低的值是否意味着较小的堆碎片?

3 个答案:

答案 0 :(得分:1)

为清楚起见,我建议您始终定义ms和mx(除非默认值足够)。我认为结果可能因JVM而异,但我相信如果-Xms超过默认的-Xmx设置,Oracle会抛出错误。

就堆碎片而言,我认为这取决于应用程序和JVM的调优。它取决于您正在使用的JVM,您正在使用的垃圾收集器等等。

答案 1 :(得分:1)

虽然我在大多数方面同意Nizzo(+1 BTW),但我认为你应该只设置你知道有用的价值,你设定的价值越少越好,这只是徒劳的。设置-Xms如果您知道因为您已经测量,那么JVM将会增长到那个大小。您可以设置最大值(如果需要设置),并减少JVM的使用大小。

我认为部分混淆是-Xms -Xmx始终设置在性能基准测试中。这是因为工作负载是已知的并且JVM已经调整到最大值。对于正常的应用程序使用,这不是一个好习惯恕我直言。

JVM在启动时保留最大堆大小作为地址空间(这是32位Windows上存在小且碎片化内存空间的问题)

除非您正在使用CMS并担心终身空间中的碎片,否则其他空间或GC都不会碎片化。

答案 2 :(得分:1)

将-Xms设置为应用程序的估计堆需求将加速应用程序的启动(当然Xms必须是< = Xmx)。 原因是VM在增长之前会花费一些精力来完成GC,因此可能会有几个Full GC,直到VM计算出应用程序的实际内存需求。 它对碎片没有帮助(无论如何只能在CMS中发生)