2012-07-09 260 views
4

根据JVM的文档,如果使用太大的Xms参数,JVM将无法启动。所以,我问,如果我不使用它会发生什么?我的虚拟机是否允许无限增长?只有当物理内存用完时它才会停止吗?如果不使用Xmx会发生什么情况?

回答

4

XMX是最大堆大小。

如果我不使用它会怎么样?

如果省略,则使用默认值。默认值因JVM版本以及运行的平台而异。版本5 are here的详细信息。

默认情况下,在服务器级机器上选择以下项。

...的物理内存高达四分之一

最大堆大小1GB的

3

如果不指定-Xmx,那么你将得到默认的配置为您的操作系统,你的JVM,它的选项和版本。

鉴于可能会影响文档的价值和时间的数量,可能会更容易问您的jvm。

例如我的Linux系统上:

$ java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version' 
uintx AdaptivePermSizeWeight    = 20    {product} 
uintx ErgoHeapSizeLimit     = 0    {product} 
uintx InitialHeapSize      := 66328448   {product} 
uintx LargePageHeapSizeThreshold   = 134217728  {product} 
uintx MaxHeapSize       := 1063256064  {product} 
uintx MaxPermSize       = 67108864   {pd product} 
uintx PermSize        = 16777216   {pd product} 
java version "1.6.0_24" 

因为它默认为-server,但-client我得到:

$ java -client -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version' 
uintx AdaptivePermSizeWeight    = 20    {product} 
uintx ErgoHeapSizeLimit     = 0    {product} 
uintx InitialHeapSize      := 16777216   {product} 
uintx LargePageHeapSizeThreshold   = 134217728  {product} 
uintx MaxHeapSize       := 268435456  {product} 
uintx MaxPermSize       = 67108864   {pd product} 
uintx PermSize        = 12582912   {pd product} 
java version "1.6.0_24" 

虽然我的Windows系统上,我得到:

C:\>java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version" 
uintx AdaptivePermSizeWeight    = 20    {product} 
uintx ErgoHeapSizeLimit     = 0    {product} 
uintx InitialHeapSize      := 16777216   {product} 
uintx LargePageHeapSizeThreshold   = 134217728  {product} 
uintx MaxHeapSize       := 268435456  {product} 
uintx MaxPermSize       = 67108864   {pd product} 
uintx PermSize        = 12582912   {pd product} 
java version "1.6.0_21" 

这是-client设置,似乎没有-server选项:

C:\>java -server -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version" 
C:\>java -server -XX:+PrintFlagsFinal -version 
Error: no `server' JVM at `C:\jdk\jre\bin\server\jvm.dll'. 
相关问题