1、JDK路径下bin文件下有应用:jvisualvm.exe
预览:
2、选择自己要监听的正在运行的应用
(1)Java VisualVM应用列表仅显示在运行的应用
(2)服务多开时应用列表显示多个不同pid的应用
(3)通过查看应用JVM参数 -Dmaven.multiModuleProjectDirectory 的值来判断是哪个程序
3、代码取值
public String runtimeMemory() {
Runtime run = Runtime.getRuntime();
long max = run.maxMemory();//最大内存,JVM配置-Xmx的值
long total = run.totalMemory();//已分配内存
long free = run.freeMemory();//已分配内存中的未使用内存
long using = total - free;//正在使用中的内存
long usable = max - total + free;//最大可用内存
return "最大内存: " + DF.format(max / (1024 * 1024.0)) + "M (100%); "
+ "已分配内存: " + DF.format(total / (1024 * 1024.0)) + "M (" + DF.format(total * 100.0 / max) + "%); "
+ "已使用内存: " + DF.format(using / (1024 * 1024.0)) + "M (" + DF.format(using * 100.0 / max) + "%); ";
}
(1)堆的监控曲线图y轴最大值是项目配置-Xmx的值,本例-Xmx1024m
(2)堆的监控曲线图黄色曲线表示“已分配内存”
(3)堆的监控曲线图蓝色曲线表示“已使用内存”
(4)堆的监控曲线图
1)4:20到4:30时间段:蓝色曲线线性增长,到一定值后骤降,峰值点时发生了一次垃圾回收GC
2)4:40到4:50时间段:程序跑业务代码,蓝色线稳步递增,已用内存稳步增加,CPU使用率高,垃圾回收频繁
3)4:40到4:50时间段:随着蓝色线稳步增长,黄色线断崖式增高又降低,JVM临时性申请更多内存以应对逐渐增长的“已用内存”的需要
4)4:50朝后:程序跑完,蓝色线和黄色线降低并趋于稳定
5)5:00朝后:黄线稳定、蓝线周期性增降,垃圾回收周期性执行
4、其他
5、GC插件
(1)安装GC插件
(2)GC插件使用