Java JVM赢得';I don’我没有告诉你要用多少内存
我正在运行一个内存密集型应用程序。有关环境的一些信息:Java JVM赢得';I don’我没有告诉你要用多少内存,java,memory,jvm,Java,Memory,Jvm,我正在运行一个内存密集型应用程序。有关环境的一些信息: 64位debian 13 GB内存 64位JVM(当我的程序运行时,我输出System.getProperty(“sun.arch.data.model”),它显示“64”) 下面是我发出的确切命令: java-Xmx9000m-jar“ale.jar”testconfig 我已经在其他几个系统上使用相同的精确数据、配置等运行了该程序,我知道JVM在这些系统上使用(峰值)6GB内存。然而,我得到了一个OutOfMemory错误。此外,在
- 64位debian
- 13 GB内存
- 64位JVM(当我的程序运行时,我输出System.getProperty(“sun.arch.data.model”),它显示“64”)
我能想到的唯一解释是,对于单个进程可以使用的最大内存量,可能存在某种系统限制。-Xmx将只设置最大分配内存。使用-Xms指定最小值。将它们设置为相同的值将使内存占用保持静态 我能想到的唯一解释是,对于单个进程可能使用的最大内存量,可能存在某种系统限制 这是一种可能的解释 另一个原因是您正试图分配一个非常大的数组。最大可能的数组是
2^31-1
元素,但实际大小取决于元素大小:
或byte[]
。。。2G字节boolean[]
或char[]
。。。4G字节short[]
。。。8GBint[]
或long[]
。。。16 GB字节Object[]
如果你给我们看stacktrace,这些理论中的一些可能会被证实或者被否定 试试java-Xms9g-Xmx9g-jar[…],这对我来说很有效。您得到的完整异常消息是什么?stacktrace是什么?使用
-XX:+PrintGCDetails
查找实际的堆布局。