Java1.5是否有默认的-Xmx设置?
出于兴趣-是否存在默认值,或者每个操作系统上的默认值不同Java1.5是否有默认的-Xmx设置?,java,jvm,Java,Jvm,出于兴趣-是否存在默认值,或者每个操作系统上的默认值不同 如果是,默认设置是什么?难以置信的难找 根据java文档,Sun/Oracle和JVM的默认值为64MB。不过,对于不同的JVM供应商,这可能有所不同。例如,的默认-Xmx值是内存总量的75%或1GB中的较小值 如果您对JVM上可以使用的最大内存量感到好奇,那么在运行时可以调用: System.out.println(Runtime.getRuntime().maxMemory()); 您可以在中找到详细信息。具体而言: 对于“服务器
如果是,默认设置是什么?难以置信的难找 根据java文档,Sun/Oracle和JVM的默认值为64MB。不过,对于不同的JVM供应商,这可能有所不同。例如,的默认-Xmx值是内存总量的75%或1GB中的较小值 如果您对JVM上可以使用的最大内存量感到好奇,那么在运行时可以调用:
System.out.println(Runtime.getRuntime().maxMemory());
您可以在中找到详细信息。具体而言:
- 对于“服务器级”计算机(2个以上处理器,2+GB RAM),默认最大堆大小为物理内存的¼,最多1G字节
- 对于“普通”计算机,它是64MB
在“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'
java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"
窗户
同样,在windows上,您可以使用以下命令:
java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"
笔记
- 根据您的系统,
可能默认为java
或-client
,因此,如果您强制应用程序使用这两个命令之一启动,也可以在启动这些命令时执行相同的操作-server
$ 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"
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"
它默认为-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系统上,我得到:
$ 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"
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
我猜是64米,但我不能确定。嗨,克罗克。不幸的是,1.5版中
java
的man
页面似乎不正确。我在回答中链接到的“人体工程学”文章中描述了实际的默认设置。在Java 6.0中,man
页面被修改为简单地说,“默认值是根据系统配置在运行时选择的。有关更多信息,请参阅HotSpot人机工程学。”尽管Windows机器没有应用自动“服务器”标志。假设Windows计算机通常运行客户端应用程序。我非常确定,您必须显式地将内存大小设置为所需的大小。否则默认值为64Mb根据链接的文档,32位Windows计算机不会获得自动“服务器”标志,但64位计算机会。不过,值得一提的是。谢谢:-)。这个链接现在似乎已断开。重定向至@GreenGiant,谢谢提醒。我修复了链接。它需要特定的VM版本吗?2006年6月1日,我收到“未识别选项”错误。