Mar*_*oth 21
正如Matt Solnit回答的那样,对于服务器类机器而言,java 1.5的细节是1GB或¼物理内存(以较低者为准),对于其他机器则为64MB(来自Java 5.0 Ergonomics文档).
不幸的是,JVM会随着时间的推移而发生变化,并且最合适的文档更难以识别,因此要找出特定JVM的默认堆(和PermGen堆)大小,最好的方法是让JVM告诉您.
在"1.6.0_06"和"1.6.0_21"之间的某个地方-XX:+PrintFlagsFinal添加了选项,它似乎首先引起了人们对"1.6.0_23"左右的关注.它提供了有关如何配置JVM的大量信息,但我们将专注于堆和permgen大小和限制.
在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)
Mat*_*nit 17
您可以在Java 5.0 Ergonomics文档中找到详细信息.特别:
根据java文档,Sun/Oracle Windows和Solaris/Linux JVM 的默认值为64MB.但是,对于不同的JVM供应商而言,这可能会有所 例如,JRockit的默认-Xmx值是内存总量的75%或1GB中的较小值.
如果您对可以在JVM上使用的最大内存量感到好奇,可以在运行时调用:
System.out.println(Runtime.getRuntime().maxMemory());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21172 次 |
| 最近记录: |