如何确定默认的java堆大小?
如果我从java命令行省略-Xmxn选项,则使用默认值。 根据java文档 “默认值是在运行时根据系统configurationselect”。
什么系统configuration设置影响默认值?
在Windows系统上,可以使用以下命令找出运行应用程序的系统的默认值。
java -XX:+ PrintFlagsFinal -version | findstr HeapSize
为-Xms
查找选项MaxHeapSize
(for -Xmx
)和InitialHeapSize
。
在Unix / Linux系统上,你可以做
java -XX:+ PrintFlagsFinal -version | grep HeapSize
我相信结果输出是以字节为单位。
根据垃圾收集器人体工程学[甲骨文] :
初始堆大小:
机器物理内存的1/64更大或合理的最小值。 在J2SE 5.0之前,默认的初始堆大小是一个合理的最小值,因平台而异。 您可以使用-Xms命令行选项覆盖此默认值。
最大堆大小:
较小的物理内存的四分之一或1GB。 在J2SE 5.0之前,默认的最大堆大小是64MB。 您可以使用-Xmx命令行选项覆盖此默认值。
更新:
正如汤姆·安德森(Tom Anderson)在评论中所指出的那样,上述是针对服务器级机器的。 从5.0 JavaTM虚拟机中的人机工程学 :
在J2SE平台版本5.0中,被称为服务器级机器的一类机器已被定义为一台机器
- 2个或更多物理处理器
- 2或更多GB的物理内存
除了运行Windows操作系统版本的32位平台之外。 在所有其他平台上,默认值与版本1.4.2的默认值相同。
在J2SE平台版本1.4.2中,默认情况下进行了以下select
- 初始堆大小为4 MB
- 最大堆大小为64 MB
这是随着Java 6更新18更改。http://www.oracle.com/technetwork/java/javase/6u18-142093.html
假设我们有超过1GB的物理内存(这些日子相当普遍),它总是物理内存的四分之一。
埃内斯托是对的。 根据他发布的链接[1]:
更新了客户端JVM堆configuration
在客户端JVM中…
默认的最大堆大小是物理内存的一半,直到物理内存大小为192 MB,否则为物理内存的四分之一直到1 GB的物理内存大小。
例如,如果您的计算机具有128兆字节的物理内存,则最大堆大小为64兆字节,而大于或等于1千兆字节的物理内存会导致最大堆大小为256兆字节。
除非您的程序创build了足够的对象来请求JVM,否则最大的堆大小实际上不会被JVM使用。 在JVM初始化过程中分配的数量小得多,称为初始堆大小。 …
- …
- 除了32位JVM的缺省最大堆大小为1千兆字节 (对应于4千兆字节的物理内存大小)以及64位JVM的32千兆字节之外,服务器JVM堆configuration人机工程学现在与客户端相同到128千兆字节的物理内存大小。
[1] http://www.oracle.com/technetwork/java/javase/6u18-142093.html
默认值是在运行时根据系统configurationselect的
看看文档页面
默认堆大小
除非在命令行中指定了初始和最大堆大小,否则将根据机器上的内存量计算。
-
客户端JVM默认初始和最大堆大小:
默认的最大堆大小是物理内存的一半,直到物理内存大小为192 MB ,否则为物理内存的四分之一,直到物理内存大小为1 GB 。
-
服务器JVM默认初始和最大堆大小:
在32位JVM上, 如果物理内存为4 GB或更多,默认的最大堆大小可以高达1 GB 。 在64位JVM上,如果有128 GB或更多的物理内存,默认的最大堆大小可以高达32 GB
什么系统configuration设置影响默认值?
您可以使用标志-Xms (初始堆大小)和-Xmx (最大堆大小)指定初始堆大小和最大堆大小。 如果您知道您的应用程序需要多less堆才能正常工作,则可以将-Xms和-Xmx设置为相同的值
对于IBM jvm,命令如下:
java -verbose:sizes -version
有关IBM SDK for Java 8的更多信息 – http://www-01.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/diag/appendixes/defaults.html?郎= EN
Java8为您的Xmssize(最小HeapSize)占用了1/6的物理内存,而对于-Xmxsize(Maximum HeapSize)则占用了物理内存的1/4。
您可以通过以下方式检查默认的Java堆大小 :
在Windows中 :
java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
在Linux中 :
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
什么系统configuration设置影响默认值?
你的物理内存和你的Java版本。