我在运行应用程序时看到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)
更有趣的是:以上所有命令在具有相同操作系统的另一台机器上运行良好(Windows Server 2008 R2 Enterprise SP1)&相同的jdk版本。物理内存为16GB。
有什么想法吗?
答案 0 :(得分:1)
有什么想法吗?
明显的结论是,如果要使用-Xms指定初始堆大小,并且希望将大小设置为大于默认最大堆大小的值,您需要指定最大堆大小。
您在不同计算机上获得不同结果的原因是JVM以不同方式计算默认堆大小,具体取决于Java的版本和执行平台。在某些情况下,它是一个常数。在其他情况下,它取决于系统上的物理内存量。
只需明确设置最大堆大小,就不会出现此问题。
如果要查找给定计算机的默认堆大小,请运行以下命令:
java -XX:+PrintFlagsFinal -version
答案 1 :(得分:0)
你机器的堆大小取决于你获得多少RAM!
32位或64位JVM的最大堆大小看起来很容易确定 查看可寻址的内存空间,如2 ^ 32(4GB),用于32位JVM和 对于64位JVM,为2 ^ 64。
对于使用32位JVM的最大堆大小,您无法真正设置4GB -Xmx JVM堆选项。您将无法创建Java虚拟机无效的最大堆大小:-Xmx错误。
您可以查看here以获取有关堆大小的详细解释文档。
另一个重要的事情是,您只能通过增加堆大小来推迟OutofMemory
例外。除非你清理你的记忆,否则你会得到一次或另外的例外使用 Visual VM 等应用程序来了解后台发生的事情。我建议您尝试优化代码,以提高性能。
答案 2 :(得分:0)
我有同样的问题。我现在还在调试它,但似乎它可能与设置为TOTALRAM / 4或(16GB / 4 = 4GB = 2 ^ 32)的默认MaxHeapSize
有关:
(uint32) 2^32 = 0
我从-XX:PrintFlagsFinal
得到以下输出:
uintx MaxHeapSize := 0 {product}
-XX:+PrintCommandLineFlags
的输出也确认了4G值:
-XX:InitialHeapSize=268428160 -XX:MaxHeapSize=4294850560 -XX:+PrintCommandLineFlags -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC