dfr*_*kow 62 java jvm memory-management
来自Java SE 6的Sun JVM的默认最大堆大小是多少(即相当于设置-Xmx)?
对于带有服务器级机器的Java SE 5来说,它是
较小的物理内存的1/4或1GB.
奖金问题:对于IBM的JVM来说,你可以问它
java -verbose:sizes -version
Run Code Online (Sandbox Code Playgroud)
你能同样问Sun的JVM吗?
编辑:
我使用Runtime.getRuntime().maxMemory来确认min(物理内存/ 4,1G),在Sun文档中引用.
小智 111
java 1.6.0_21或更高版本,或者......
$ java -XX:+PrintFlagsFinal -version 2>&1 | grep MaxHeapSize
uintx MaxHeapSize := 12660904960 {product}
Run Code Online (Sandbox Code Playgroud)
看起来min(1G)已被删除.
或者在Windows上使用findstr
C:\>java -XX:+PrintFlagsFinal -version 2>&1 | findstr MaxHeapSize
Run Code Online (Sandbox Code Playgroud)
dfr*_*kow 15
人们可以问一些Java代码:
long maxBytes = Runtime.getRuntime().maxMemory();
System.out.println("Max memory: " + maxBytes / 1024 / 1024 + "M");
Run Code Online (Sandbox Code Playgroud)
见javadoc.
小智 14
使用JDK,您还可以使用jinfo连接到有<PROCESS_ID>问题的JVM 并获取MaxHeapSize的值:
jinfo -flag MaxHeapSize <PROCESS_ID>
Run Code Online (Sandbox Code Playgroud)
从JDK6U18开始,以下是堆大小的配置.
在客户端JVM中,已修改默认Java堆配置以提高当今富客户端应用程序的性能.初始和最大堆大小更大,并且更好地调整与分代垃圾收集相关的设置.
默认的最大堆大小是物理内存的一半,直到物理内存大小为192兆字节,否则为物理内存的四分之一,物理内存大小为1千兆字节.例如,如果您的计算机具有128兆字节的物理内存,则最大堆大小为64兆字节,大于或等于1千兆字节的物理内存会导致最大堆大小为256兆字节.除非程序创建足够的对象来要求它,否则JVM实际上不会使用最大堆大小.在JVM初始化期间分配了一个小得多的数量,称为初始堆大小.此数量至少为8兆字节,否则为物理内存的1/64,直到物理内存大小为1千兆字节.
资料来源:http://www.oracle.com/technetwork/java/javase/6u18-142093.html
一种方法是如果你安装了一个jdk,在bin文件夹中有一个名为jconsole的实用程序(甚至可以使用visualvm).启动它并连接到相关的java进程,您可以看到堆大小设置集和许多其他详细信息
当仅运行headless或cli时,如果在启动相关服务时指定要连接的端口,则可以在LAN上使用jConsole.