Java SE 6中Sun的JVM的默认最大堆大小是多少?

时间:2010-05-26 17:22:23

标签: java jvm memory-management

来自Java SE 6的Sun JVM的默认最大堆大小是多少(即相当于设置-Xmx)?

使用服务器级机器it's

看起来像Java SE 5
  

小于1/4的物理内存或1GB。

奖金问题:对于IBM的JVM,您可以ask it

java -verbose:sizes -version

你能同样问Sun的JVM吗?

修改

我使用Runtime.getRuntime()。maxMemory来确认Sun documentation中引用的min(物理内存/ 4,1G)。

6 个答案:

答案 0 :(得分:111)

java 1.6.0_21或更高版本,或者......

$ java -XX:+PrintFlagsFinal -version 2>&1 | grep MaxHeapSize
uintx MaxHeapSize                         := 12660904960      {product}

看起来min(1G)已被移除。

或者在Windows上使用findstr

C:\>java -XX:+PrintFlagsFinal -version 2>&1 | findstr MaxHeapSize

答案 1 :(得分:15)

可以问一些Java代码:

long maxBytes = Runtime.getRuntime().maxMemory();
System.out.println("Max memory: " + maxBytes / 1024 / 1024 + "M");

请参阅javadoc

答案 2 :(得分:14)

使用JDK, 您还可以使用jinfo连接到有问题的<PROCESS_ID>的JVM,并获取MaxHeapSize的值:

jinfo -flag MaxHeapSize <PROCESS_ID>

答案 3 :(得分:8)

从JDK6U18开始,以下是堆大小的配置。

  

在Client JVM中,默认的Java堆配置已经完成   修改以改善当今富客户端的性能   应用。初始和最大堆大小更大和设置   与世代垃圾收集相关的问题得到了更好的调整。

     

默认的最大堆大小是物理内存的一半,物理内存大小为192兆字节,否则为四分之一   物理内存最大为1千兆字节的物理内存。       例如,如果您的计算机具有128兆字节的物理内存,则最大堆大小为64兆字节,并且大于或等于   到1千兆字节的物理内存导致最大堆大小为256   兆字节。       除非程序创建足够的对象来要求它,否则JVM实际上不会使用最大堆大小。数量少得多,   称为初始堆大小,在JVM初始化期间分配。   此数量至少为8兆字节,否则为物理的1/64   内存最大为1千兆字节的物理内存。

来源:http://www.oracle.com/technetwork/java/javase/6u18-142093.html

答案 4 :(得分:5)

一种方法是如果你安装了jdk,在bin文件夹中有一个名为jconsole的实用程序(甚至可以使用visualvm)。 启动它并连接到相关的java进程,您可以看到堆大小设置集和许多其他详细信息

当仅运行headless或cli时,如果在启动相关服务时指定了要连接的端口,则jConsole可以在lan上使用。

答案 5 :(得分:3)

要回答这个问题,Java VM是处于CLIENT还是SERVER模式至关重要。 您可以指定“-client”或“-server”选项。否则java使用内部规则;基本上win32总是客户端,Linux总是服务器,但请看这里的表:

http://docs.oracle.com/javase/6/docs/technotes/guides/vm/server-class.html

Sun / Oracle jre6u18 doc说再客户端:如果机器有<= 192MB,VM会获得1/2的物理内存;如果机器有&lt; = 1Gb,则为内存的1/4;最大256Mb。在我对具有2Gb phys mem的32位WindowsXP系统的测试中,Java分配了256Mb,这与文档一致。

Sun / Oracle jre6u18 doc说re server:与客户端相同,然后添加令人困惑的语言:对于32位JVM,默认最大值为1Gb,对于64位JVM,默认值为32Gb。在我使用8Gb物理的64位Linux机器上测试时,Java分配2Gb,这是物理的1/4;在具有128Gb物理Java的64位Linux机器上,分配32Gb,同样是物理的1/4。

感谢这篇SO帖子指导我:

Definition of server-class machine changed recently?