0

What would be the effect of setting only -Xms without setting a -Xmx for eg. java -Xms 2048m ? Does setting a high lower value for -Xms mean lesser Heap Fragmentation?

4

3 回答 3

1

虽然我在大多数方面都同意 Nizzo(+1 BTW),但我是少数认为你应该只设置你知道有用的值,你设置的值越少越好,而且徒劳无功,只有-Xms当你设置知道,因为您测量到 JVM 无论如何都会增长到那个大小。如果需要设置,您可以只设置最大值,而更少的 JVM 会计算出要使用的正确大小。

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

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

顺便说一句,除非您使用 CMS 并且担心永久空间中的碎片,否则其他空间或 GC 都不会碎片。

于 2013-09-13T07:37:07.123 回答
1

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

于 2013-09-13T07:39:59.237 回答
1

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

至于堆碎片,我认为这取决于应用程序和 JVM 的调优。它会根据您使用的 JVM、您使用的垃圾收集器等而有所不同。

于 2013-09-13T05:27:05.393 回答