出于兴趣 - 每个操作系统上是否存在默认值或不同?
如果是,那么默认值是多少?难以置信的难以找到!
答案 0 :(得分:21)
正如Matt Solnit所回答的那样,对于服务器类机器,java 1.5的具体内容为1GB或¼的物理内存(以较低者为准),而对于其他机器则为64MB(来自{{3 }})。
不幸的是,JVM随着时间的推移而变化,最合适的文档变得越来越难以识别,因此要找出特定JVM的默认堆(和PermGen堆)大小,最好的方法是让JVM告诉你你。
介于“1.6.0_06”和“1.6.0_21”之间,添加了-XX:+PrintFlagsFinal
选项,它似乎首先来到Java 5.0 Ergonomics documentation左右“1.6.0_23”。它提供了有关如何配置JVM的大量信息,但我们将专注于堆和permgen大小和限制。
在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 :(得分:9)
根据java文档,Sun / Oracle Windows和Solaris/Linux JVM的默认值为64MB。但是,对于不同的JVM供应商而言,这可能会有所例如,JRockit的默认-Xmx值是内存总量的75%或1GB中的较小值。
如果您对可以在JVM上使用的最大内存量感到好奇,可以在运行时调用:
System.out.println(Runtime.getRuntime().maxMemory());