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

Pea*_*Gen 1 java memory-management

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

请帮忙.

Jos*_*non 7

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

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

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

取自1.6.0_18更新说明

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

  • 我是唯一一个认为规则很奇怪的人.假设您的Java应用程序在192 MB计算机上使用默认值运行正常.现在,如果升级到256 MB,则同一应用程序可能会因OutOfMemory而失败. (3认同)
  • @Hope不,他的声明是按照预期的(为什么它很奇怪 - 减少内存和内存耗尽是预期的,增加它并且耗尽是非常奇怪的行为).在192MB,你得到(192/2)MB,96MB.在256MB,你得到(256/4)MB,64MB.您增加了可用内存量,但Java中的内存却减少了. (3认同)