使用 javap 可以查看 Java 字节码反编译的源文件
示例:
public class Test{
public static void main(String []args) {
System.out.println("Hello World");
}
}
javap -c Test.class
public class Test{
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String Hello World
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
}
jps查询当前所有java进程
jstat 主要用于监控JVM信息状态,主要是 GC 信息
jstat -gc 11600 来查看该进程的 GC 信息
参数含义
每个对象都有一个指向它自身类的指针,_klass: 指向类的 4 字节指针,64 位平台上 _klass: 指向类的 8 字节的指针,为了节约这些空间,引入了类指针压缩空间。
jcmd 可以查看 JVM 信息
jcmd pit Thread.print -l 打印指定java进程在jvm中的所有线程栈
jcmd 11600 GC.heap_dump ./dump.hprof 指定目录文件生成当前java进程的 堆内存dump,map映射信息
更多命令 通过jcmd pid help 查看
jmap 打印出 Java 进程内存中 Object 的情况
jmap 一般是用来导出 内存dump的,命令参考 Example: jmap -dump:live,format=b,file=heap.bin
实际上新版的输入是这样的
[root@admin ~]# jmap --help
Usage:
jmap [option] <pid>
(to connect to running process)
jmap [option] <executable <core>
(to connect to a core file)
jmap [option] [server_id@]<remote server IP or hostname>
(to connect to remote debug server)
where <option> is one of:
<none> to print same info as Solaris pmap
-heap to print java heap summary
-histo[:live] to print histogram of java object heap; if the "live"
suboption is specified, only count live objects
-clstats to print class loader statistics
-finalizerinfo to print information on objects awaiting finalization
-dump:<dump-options> to dump java heap in hprof binary format
dump-options:
live dump only live objects; if not specified,
all objects in the heap are dumped.
format=b binary format
file=<file> dump heap to <file>
Example: jmap -dump:live,format=b,file=heap.bin <pid>
-F force. Use with -dump:<dump-options> <pid> or -histo
to force a heap dump or histogram when <pid> does not
respond. The "live" suboption is not supported
in this mode.
-h | -help to print this help message
-J<flag> to pass <flag> directly to the runtime system
常用的 options 参数:
jhat 分析 Java 堆的命令,可以将堆中对象以 html 的形式显示出来
没怎么用过
jstack 是堆栈跟踪工具,主要用于打印给定进程 pid 的堆栈信息,一般在发生死锁或者 CPU 100% 的时候排查问题使用,可以去查询当前运行的线程以及线程的堆栈信息是什么情况
将指定java进程在jvm中的线程栈 全部打印,追加到文件中
原文:https://heapdump.cn/article/2374045