Java虚拟机堆优化参数

Java虚拟机堆优化参数,java,performance,heap,Java,Performance,Heap,只设置-Xms而不设置-Xmx会有什么影响 例如java-XMS2048M?为-Xms设置一个高低值是否意味着堆碎片更少?为了清楚起见,我建议您始终定义ms和mx(除非默认值足够)。我认为结果可能因JVM而异,但我相信如果-Xms超过默认的-Xmx设置,Oracle将抛出一个错误 至于堆碎片,我认为这取决于应用程序和JVM的调优。它将根据您使用的JVM、您使用的垃圾收集器等而有所不同。为了清晰起见,我建议您始终定义ms和mx(除非默认值足够)。我认为结果可能因JVM而异,但我相信如果-Xms超过

只设置-Xms而不设置-Xmx会有什么影响
例如java-XMS2048M?为-Xms设置一个高低值是否意味着堆碎片更少?

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


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

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


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

虽然我在大多数方面同意Nizzo(+1 BTW),但我是少数人,认为您应该只设置您知道有用的值,设置的值越少越好,这是徒劳的,如果您知道JVM将增长到该大小,那么只需设置
-Xms
。如果需要设置最大值,您只需设置最大值,JVM就可以计算出正确的大小

我认为部分混淆是
-Xms-Xmx
总是在性能基准中设置的。这是因为工作负载是已知的,并且JVM已被调整到最大值。这对于正常的应用程序使用IMHO来说并不是一个好的实践

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


顺便说一句,除非你使用的是CMS,并且担心终身空间中的碎片,否则其他空间或GCs都不会碎片化

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

我认为部分混淆是
-Xms-Xmx
总是在性能基准中设置的。这是因为工作负载是已知的,并且JVM已被调整到最大值。这对于正常的应用程序使用IMHO来说并不是一个好的实践

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


顺便说一句,除非你使用的是CMS,并且担心终身空间中的碎片,否则其他空间或GCs都不会碎片化

将-Xms设置为应用程序的估计堆需求将加快应用程序的启动速度(当然,Xms必须将-Xms设置为应用程序的估计堆需求将加快应用程序的启动速度(当然,Xms必须为+1,使用不适当的Xms设置比让JVM自动处理堆大小更糟糕。特别是如果Xms=xmx,JVM无法再优化堆大小。+1使用不适当的Xms设置比让JVM自动处理堆大小更糟糕。特别是如果Xms=xmx,JVM c不能再优化堆的大小了。