是否有java 1.5的默认-Xmx设置?

时间:2010-08-06 22:30:54

标签: java jvm

出于兴趣 - 每个操作系统上是否存在默认值或不同?

如果是,那么默认值是多少?难以置信的难以找到!

3 个答案:

答案 0 :(得分:21)

正如Matt Solnit所回答的那样,对于服务器类机器,java 1.5的具体内容为1GB或¼的物理内存(以较低者为准),而对于其他机器则为64MB(来自{{3 }})。

不幸的是,JVM随着时间的推移而变化,最合适的文档变得越来越难以识别,因此要找出特定JVM的默认堆(和Per​​mGen堆)大小,最好的方法是让JVM告诉你你。


介于“1.6.0_06”和“1.6.0_21”之间,添加了-XX:+PrintFlagsFinal选项,它似乎首先来到Java 5.0 Ergonomics documentation左右“1.6.0_23”。它提供了有关如何配置JVM的大量信息,但我们将专注于堆和permgen大小和限制。

的Linux

在Linux上,您可以使用命令:

java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'

同样在Windows上,您可以使用命令:

java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"

注释

  • 根据您的系统,java可能默认为-client-server,因此,如果您强制开始使用其中任何一个应用,那么您也可以执行相同操作启动这些命令。

实施例

在我的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'.

总结:

Parameter \ JVM             1.6.0_24                   
                            Lin/svr  Lin/cli  Windows  
InitialHeapSize               63MB     16MB     16MB   
LargePageHeapSizeThreshold   128MB    128MB    128MB   
MaxHeapSize                 1014MB    256MB    256MB   
MaxPermSize                   64MB     64MB     64MB   
PermSize                      16MB     12MB     12MB   

答案 1 :(得分:17)

您可以在Java 5.0 Ergonomics documentation中找到详细信息。具体做法是:

  • 对于“服务器级”计算机(2+处理器,2 GB以上RAM),默认最大堆大小为¼物理内存,最高1Gbyte
  • 对于“常规”机器,它是64 MB。

答案 2 :(得分:9)

根据java文档,Sun / Oracle WindowsSolaris/Linux JVM的默认值为64MB。但是,对于不同的JVM供应商而言,这可能会有所例如,JRockit的默认-Xmx值是内存总量的75%或1GB中的较小值。

如果您对可以在JVM上使用的最大内存量感到好奇,可以在运行时调用:

System.out.println(Runtime.getRuntime().maxMemory());