jstack <进程号>
:查看栈区域jmap -heap <进程号>
:查看堆空间的快照,会显示堆中每个区域的内存占用情况jconsole
:图形化的界面,动态查看内存和CPU的占用情况,也可以连接远程Linux机器,不过需要设置在启动是设置JVM参数- 比如:
java -Djava.rmi.server.hostname='ip地址' -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port='连接端口' -Dcom.sun.management.jmxremote.ssl='是否安全连接' - Dcom.sun.management.jmxremote.authenticate='是否认证' 'java类名'
- 比如:
jvisualvm
:有上面那些工具的功能,并且可以查看占用内存最大的对象是哪些,HSDB
:java -cp ./lib/sa-jdi.jar sun.jvm.hotspot.HSDB
,一般开启时会禁用指针压缩,-XX:-UseCompressedOops -XX:-UseCompressedClassPointers
,可以查看到系统的对象在操作系统中的地址,可以看到魔数和类的信息比如虚方法表vtable。