java堆空间是由RAM还是硬盘决定的?

我正在执行一个巨大的计算,我得到一个“堆外空间”错误。 我想知道的是,如果Java自动进行分页,那么在执行此计算时可能会使用我的硬盘空间吗? 如果它不自动执行,我该如何启用此选项?

Java堆存在于RAM中(忽略虚拟内存:)。 您可以分别使用-Xms-Xmx VM args更改默认初始堆大小和最大堆大小。

通过使用-Xms和-Xmx开关分别指定初始和最大大小,可以覆盖旧一代的默认堆大小:

 java -Xms  -Xmx  program 

例如:

 java -Xms128m -Xmx512m application 

你的机器有多少内存? 您认为需要更多堆的计算是什么?

但是,JVM可以确定堆的大小。 对于大多数情况,它是通过-Xmx命令行参数,具有不同的默认值。 你想要的东西很可能是:

 java -Xmx2048M foo.bar.MyProgram 

操作系统的虚拟内存管理器(而不是Java虚拟机(JVM))决定何时弹出内存页并将其写入硬盘。

如前面的答案所述,JVM将堆空间完全存储在驻留内存中,大多数JVM实现允许用户指定最大堆空间。 例如, OpenJDK允许您使用-Xmx选项设置最大堆大小。 运行java -X以查看此和其他非标准OpenJDK命令行选项。

它由操作系统和特殊标志决定。

 $ java -X ... -Xms set initial Java heap size -Xmx set maximum Java heap size -Xss set java thread stack size ...