如何查看Java 1.4(1.4.2_08)的JVM当前堆大小?
你碰到的这个错误原因很明确——-XX:+PrintFlagsFinal这个JVM参数是从Java 5(也就是JDK 1.5)才正式引入的,Java 1.4完全不认识这个选项,所以启动时会直接报错说无法创建虚拟机。
针对Java 1.4.2_08版本,这里有几个可行的方法可以查看JVM堆大小:
查看默认堆参数说明
先执行java -X命令,它会列出所有Java 1.4支持的非标准JVM参数,其中就包含堆内存相关的-Xms(初始堆大小)和-Xmx(最大堆大小)的说明:java -X输出里会有类似这样的内容:
-Xms
set initial Java heap size
-Xmxset maximum Java heap size
-Xssset java thread stack size 通过代码获取实际堆内存数据
写一段简单的Java代码,利用Runtime API直接获取当前JVM的堆内存状态,这是最直观的方式:public class HeapChecker { public static void main(String[] args) { Runtime rt = Runtime.getRuntime(); long initialHeap = rt.totalMemory() / (1024 * 1024); long maxHeap = rt.maxMemory() / (1024 * 1024); long freeHeap = rt.freeMemory() / (1024 * 1024); long usedHeap = (rt.totalMemory() - rt.freeMemory()) / (1024 * 1024); System.out.println("初始堆内存: " + initialHeap + " MB"); System.out.println("最大堆内存: " + maxHeap + " MB"); System.out.println("空闲堆内存: " + freeHeap + " MB"); System.out.println("已使用堆内存: " + usedHeap + " MB"); } }编译运行:
javac HeapChecker.java && java HeapChecker就能得到当前JVM实际使用的堆内存数值。
通过GC日志查看堆变化
如果想观察程序运行过程中堆内存的动态变化,可以用-verbose:gc参数启动你的应用:java -verbose:gc YourMainClass每次GC触发时,控制台会输出类似这样的日志:
[GC 325407K->83000K(776704K), 0.2300771 secs]
[Full GC 83000K->82769K(776704K), 1.8479984 secs]
括号里的数值就是当前JVM的最大堆大小,箭头前后则是GC前后的堆使用量。
内容的提问来源于stack exchange,提问作者user1930645

