jmap与stat工具实战分析
实例:
public class MyTest5 {
public static void main(String[] args) {
for (; ;) {
System.out.println("hello world");
}
}
}
-
linux 下查看java所有的进程端口号信息:ps -ef | grep java
-
window下不知道咋查看:
-
然后再:jmap -clstats [进程端口号:12880] 【-clstats:to print class loader statistics】
C:\Users\admin>jmap -clstats 12880 Attaching to process ID 12880, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.131-b11 finding class loader instances ..done. computing per loader stat ..done. please wait.. computing liveness.liveness analysis may be inaccurate ...
class_loader classes bytes parent_loader alive? type 519 971031 null(空) live 0x00000007
0200719049 145565 0x00000007
020071f0live sun/misc/Launcher$
AppClassLoader@
0x00000007c000f6a00x00000007
020071f00 0 null(根类
加载器)live sun/misc/Launcher$
ExtClassLoader@
0x00000007c000fa48total = 3 568 1116596 N/A alive=3, dead=0 N/A
-
-
jmap -heap [进程端口号] 【-heap:to print java heap summary】
执行:jmap -heap 2330 时候,当前线程的程序不能是dug模式启动,要改成run方式。
-
jstat -gc [进程端口号] 【用来打印元空间的信息】
- 如果是MyTest5, MC MU的值是不会变的,编译之后就确定了
- 而对于MyTest4来说,因为enhancer.create();不停的创建实例,所以MU是一直变化的。要么在默认情况下空间大小字段增加,要么显式设置空间大小下,被使用的容量达到最大时,程序终止。