Java堆内存是否基于RAM更改?

时间:2012-06-13 18:50:17

标签: java memory-management

我知道默认的Java堆内存是128 MB。由于它是默认,我想知道此内存是否根据RAM大小自动更改。例如,对于具有128 MB RAM的计算机,堆内存128太多而且应该自动更改。因为如果一个应用程序使用全部128个堆,PC将最终遇到麻烦。

请帮忙。

4 个答案:

答案 0 :(得分:7)

在Java 1.6 update 18(及更高版本)中,如果未指定,则客户端JVM中的缺省堆大小遵循以下规则:

  

默认的最大堆大小是物理内存的一半   物理内存大小为192兆字节,否则为四分之一   物理内存最大为1千兆字节的物理内存。

     

有关   例如,如果您的计算机具有128兆字节的物理内存,那么   最大堆大小为64兆字节,大于或等于1   千兆字节的物理内存导致最大堆大小为256   兆字节。

取自1.6.0_18 update notes

在以前版本的Java堆中,默认情况下,堆大小不是变量。

答案 1 :(得分:3)

不会,除非您在启动时使用-Xmx选项要求,否则不会自动更改。

在任何情况下,32位计算机上都不能超过2 GB。如果您需要更多,那么您必须获得具有大量RAM的64位操作系统。

答案 2 :(得分:1)

您可以使用aptions -Xmx和-Xms

指定JVM堆大小

-Xmx - 最大尺寸。 -Xms - 最小尺寸。

您指定类似

 -Xmx64m -Xms32m  (for 64 and 32 MB)

答案 3 :(得分:1)

没有。它不会自动更改。有关HotSpot JVM内存选项的更多信息,请查看here

有关处理Java OutOfMemoryError的更多Here