• 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:有上面那些工具的功能,并且可以查看占用内存最大的对象是哪些,
  • HSDBjava -cp ./lib/sa-jdi.jar sun.jvm.hotspot.HSDB,一般开启时会禁用指针压缩,-XX:-UseCompressedOops -XX:-UseCompressedClassPointers,可以查看到系统的对象在操作系统中的地址,可以看到魔数和类的信息比如虚方法表vtable。