首页 文章

如何确定默认的Java堆大小?

提问于
浏览
319

如果我从Java命令行中省略-Xmxn选项,则使用默认值 . 根据Java documentation "the default value is chosen at runtime based on system configuration" .

哪些系统配置设置会影响默认值?

7 回答

  • 98

    在Windows系统上,您可以使用以下命令查找运行应用程序的系统上的默认值 .

    java -XX:PrintFlagsFinal -version | findstr HeapSize

    查找选项 MaxHeapSize (对于 -Xmx )和 InitialHeapSize 对于 -Xms .

    在Unix / Linux系统上,你可以做到

    java -XX:PrintFlagsFinal -version | grep HeapSize

    我相信结果输出是以字节为单位 .

  • 415

    根据Garbage Collector Ergonomics [Oracle]

    初始堆大小:机器上物理内存的1/64或更大的合理最小值 . 在J2SE 5.0之前,默认的初始堆大小是合理的最小值,因平台而异 . 您可以使用-Xms命令行选项覆盖此默认值 . 最大堆大小:物理内存的1/4或1GB的较小值 . 在J2SE 5.0之前,默认的最大堆大小为64MB . 您可以使用-Xmx命令行选项覆盖此默认值 .

    UPDATE:

    正如Tom Anderson在评论中指出的那样,上面是服务器级机器 . 来自Ergonomics in the 5.0 JavaTM Virtual Machine

    在J2SE平台版本5.0中,一类称为服务器级机器的机器被定义为具有2个或更多物理处理器的机器2个或更多Gbytes的物理内存,但运行版本的32位平台除外Windows操作系统 . 在所有其他平台上,默认值与1.4.2版的默认值相同 . 在J2SE平台版本1.4.2中,默认情况下,以下选项的初始堆大小为4 MB,最大堆大小为64 MB

  • 15

    这是用Java 6 update 18更改的 .

    假设我们有超过1 GB的物理内存(这些天很常见),它总是物理内存的1/4 .

  • 7

    埃内斯托是对的 . 根据他发布的链接[1]:

    更新的客户端JVM堆配置在客户端JVM中...默认的最大堆大小是物理内存的一半,物理内存大小为192兆字节,否则为物理内存的四分之一,物理内存大小为1千兆字节 . 例如,如果您的计算机具有128兆字节的物理内存,则最大堆大小为64兆字节,大于或等于1千兆字节的物理内存会导致最大堆大小为256兆字节 . 除非程序创建足够的对象来要求它,否则JVM实际上不会使用最大堆大小 . 在JVM初始化期间分配一个小得多的数量,称为初始堆大小 . ......服务器JVM堆配置人机工程学现在与客户端相同,不同之处在于32位JVM的默认最大堆大小为1千兆字节,对应于4千兆字节的物理内存大小,对于64位JVM为32千兆字节,对应的物理内存大小为128千兆字节 .

    [1] http://www.oracle.com/technetwork/java/javase/6u18-142093.html

  • 24

    Java 8 takes more than 1/6th of your physical memory for your Xmssize (Minimum HeapSize) and less than 1/4th of your physical memory for your -Xmxsize (Maximum HeapSize).

    您可以通过以下方式检查 default Java heap size

    Windows

    java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
    

    Linux

    java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
    

    哪些系统配置设置会影响默认值?

    Your physical memory and your Java version.

  • 9

    根据系统配置在运行时选择默认值

    看一下文档page

    默认堆大小除非在命令行中指定了初始和最大堆大小,否则将根据计算机上的内存量计算它们 .

    • 客户端JVM默认初始和最大堆大小:

    默认的最大堆大小是物理内存的一半,直到物理内存大小为192兆字节(MB),否则为物理内存的四分之一,物理内存大小为1千兆字节(GB) .

    • 服务器JVM默认初始和最大堆大小:

    在32位JVM上,如果有4 GB或更多物理内存,则默认最大堆大小最多可达1 GB . 在64位JVM上,如果存在128 GB或更多物理内存,则默认最大堆大小最多可为32 GB

    哪些系统配置设置会影响默认值?

    您可以使用标志 -Xms (初始堆大小)和 -Xmx (最大堆大小)指定初始和最大堆大小 . 如果您知道应用程序需要多少堆才能正常工作,可以将 -Xms-Xmx 设置为相同的值

  • 6

    对于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?lang=en

相关问题