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

Jav*_*cky 15 java jvm

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

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

Mar*_*oth 21

正如Matt Solnit回答的那样,对于服务器类机器而言,java 1.5的细节是1GB或¼物理内存(以较低者为准),对于其他机器则为64MB(来自Java 5.0 Ergonomics文档).

不幸的是,JVM会随着时间的推移而发生变化,并且最合适的文档更难以识别,因此要找出特定JVM的默认堆(和Per​​mGen堆)大小,最好的方法是让JVM告诉您.


在"1.6.0_06"和"1.6.0_21"之间的某个地方-XX:+PrintFlagsFinal添加了选项,它似乎首先引起了人们对"1.6.0_23"左右的关注.它提供了有关如何配置JVM的大量信息,但我们将专注于堆和permgen大小和限制.

Linux的

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

java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
Run Code Online (Sandbox Code Playgroud)

视窗

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

java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"
Run Code Online (Sandbox Code Playgroud)

笔记

  • 根据您的系统,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"
Run Code Online (Sandbox Code Playgroud)

它默认为-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"
Run Code Online (Sandbox Code Playgroud)

在我的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"
Run Code Online (Sandbox Code Playgroud)

哪些是-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'.
Run Code Online (Sandbox Code Playgroud)

总结一下:

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   
Run Code Online (Sandbox Code Playgroud)

  • 它需要特定的VM版本吗?在1.6.06我得到"无法识别的选项"错误. (3认同)

Mat*_*nit 17

您可以在Java 5.0 Ergonomics文档中找到详细信息.特别:

  • 对于"服务器类"机器(2+处理器,2 + GB RAM),默认最大堆大小是物理内存的1/4,最大为1Gbyte
  • 对于"常规"机器,它是64 MB.

  • 根据链接的文档,__32位____ Windows机器没有自动"服务器"标志,但64位机器.不过,值得注意的是.谢谢 :-). (2认同)

kro*_*ock 9

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

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

System.out.println(Runtime.getRuntime().maxMemory());
Run Code Online (Sandbox Code Playgroud)