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

时间:2011-03-11 17:25:13

标签: java memory

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

4 个答案:

答案 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
...