【发布时间】:2014-08-19 20:57:29
【问题描述】:
我正在运行一个内存密集型应用程序。关于环境的一些信息:
- 64位debian
- 13 GB 内存
- 64 位 JVM(我在程序运行时输出 System.getProperty("sun.arch.data.model"),显示为“64”)
这是我发出的确切命令:
java -Xmx9000m -jar "ale.jar" testconfig
我已经在其他几个系统上使用完全相同的数据、配置等运行程序,并且我知道 JVM 在这些系统上使用(在其峰值)6 GB 内存。但是,我收到 OutOfMemory 错误。此外,在程序执行期间,系统的可用内存永远不会低于 8.5 GB。
当我在执行期间输出 Runtime.getRuntime().maxMemory() 时,我得到的值是 3044540416,即 ~ 3 GB。
我不知道它是否相关,但这是一个 Google Compute Engine 实例。
我能想到的唯一解释是,单个进程可以使用的最大内存量可能存在某种系统限制。
【问题讨论】:
-
试试 java -Xms9g -Xmx9g -jar [...],这对我有用。
-
您收到的完整异常消息是什么?什么是堆栈跟踪?
-
使用
-XX:+PrintGCDetails查找实际的堆布局。