在运行应用程序时,我看到了一个jvm问题,我只需执行以下java命令:
C:\Users\optitest>I:\j2sdk\bin\java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01, mixed mode)
C:\Users\optitest>I:\j2sdk\bin\java -Xms4g -version
Error occurred during initialization of VM
Incompatible minimum and maximum heap sizes specified
即使xms设置为128m也不起作用:
C:\Users\optitest>I:\j2sdk\bin\java -Xms128m -version
Error occurred during initialization of VM
Incompatible minimum and maximum heap sizes specified
仅当xms设置为64m或以下时才有效:
C:\Users\optitest>I:\j2sdk\bin\java -Xms64m -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01, mixed mode)
有趣的是,如果我指定xmx,那么它工作得很好。
C:\Users\optitest>I:\j2sdk\bin\java -Xms4g -Xmx4g-version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01, mixed mode)
C:\Users\optitest>I:\j2sdk\bin\java -Xms4g -Xmx8g-version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01, mixed mode)
更有趣的是:以上所有命令在另一台具有相同操作系统(windowsserver2008r2enterprisesp1)和相同jdk版本的计算机上运行良好。物理内存为16GB。
知道吗?
最佳答案
知道吗?
显然,如果要使用-XMS指定初始堆大小,并且希望将该大小设置为大于默认最大堆大小的值,则需要指定最大堆大小。
在不同的机器上得到不同结果的原因是,jvm以不同的方式计算默认堆大小,这取决于java的版本和执行平台。在某些情况下,它是一个常数。在其他情况下,这取决于系统上的物理内存量。
只需显式地设置最大堆大小,就不会有这个问题了。
如果要找出给定计算机的默认堆大小,请运行以下命令:
java -XX:+PrintFlagsFinal -version