我正在执行一个巨大的计算,我得到一个“没有堆空间”的错误。我想知道的是,如果Java自动进行分页,那么在执行此计算时可能会使用我的硬盘空间吗?如果没有自动执行此操作,如何启用此选项?
答案 0 :(得分:12)
Java堆存在于RAM中(忽略虚拟内存:)。您可以分别使用-Xms
and -Xmx
VM args更改默认初始堆大小和最大堆大小。
使用-Xms和-Xmx开关分别指定初始和最大大小,可以覆盖旧一代的默认堆大小:
java -Xms <initial size> -Xmx <maximum size> program
例如:
java -Xms128m -Xmx512m application
您的机器有多少内存?您认为需要更多堆的计算是什么类型的计算?
答案 1 :(得分:3)
操作系统的虚拟内存管理器,而不是Java虚拟机(JVM),决定何时弹出内存页并将其写入硬盘。
如前面的答案所述,JVM将堆空间完全存储在驻留内存中,大多数JVM实现允许用户指定最大堆空间。例如,OpenJDK允许您使用-Xmx<size>
选项设置最大堆大小。运行java -X
以查看此选项和其他非标准OpenJDK命令行选项。
答案 2 :(得分:2)
可以确定JVM想要的堆大小。对于大多数情况,它是通过-Xmx命令行参数,具有不同的默认值。你想要的东西很可能是:
java -Xmx2048M foo.bar.MyProgram
答案 3 :(得分:0)
由操作系统和特殊标志决定。
$ java -X
...
-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
-Xss<size> set java thread stack size
...