一、Java反编译
- 概述: javap是 Java class文件分解器,可以反编译,也可以查看java编译器生成的字节码,从而对代码内部的执行逻辑进行分析。
- 语法:
- 把java文件编译为class文件
例如:javac Test.java
- 执行javap操作:javap Test(不加 .class后缀)
例如:javap -c Test
二、JVM进程状态工具
- 概述: 列出目标系统上已检测的HotSpot Java虚拟机进程信息。可直接在装有java运行环境的Windows 或者 Linux机器上使用命令行执行jps命令。
- 语法:
jps [ options ] [ hostid ]
- option可选参数:
-q
:输出JVM进程ID。
-m
:输出JVM启动时传递给main()函数的参数,嵌入式的JVM可能参数为null。
-v
:输出JVM进程启动时传递的参数。
-V
:输出JVM进程号和启动类型(jar 或者 主类名称,是默认的选项)。
- hostid: 主机ID,可以查看其它机器的进程信息。
- 例如:
jps -m
36376 KotlinCompileDaemon
36571 Launcher
36572 Test
36574 Jstat
36639 Jps
三、Java虚拟机GC统计
- 概述:jstat利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。
- 例如:
jstat -gcutil [vmid] [检查次数]
:统计gc信息
S0 S1 E O M CCS YGC YGCT FGC FGCT CGC CGCT GCT
0.00 100.00 0.00 6.07 94.65 86.00 1 0.010 0 0.000 0 0.000 0.010
0.00 100.00 0.00 6.07 94.65 86.00 1 0.010 0 0.000 0 0.000 0.010
0.00 100.00 0.00 6.07 94.65 86.00 1 0.010 0 0.000 0 0.000 0.010
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
CGC:并发垃圾回收次数(并发 GC Stop-The-World 的次数)
CGCT:并发垃圾回收消耗时间(并发 GC Stop-The-World 的时间)
GCT:垃圾回收消耗总时间
四、GC日志查看
- 设置jvm的参数
- -XX:+PrintGC 输出GC日志
- -XX:+PrintGCDetails 输出GC的详细日志
- -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
- -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
- -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
- -Xloggc:../logs/gc.log 日志文件的输出路径
五、设置Java垃圾回收器
GC |
垃圾回收器 |
jvm参数 |
Serial |
串行垃圾回收器 |
-XX:+UseSerialGC |
ParNew |
Serial收集器的多线程版本 |
-XX:+UseParNewGC |
Parallel |
Parallel垃圾回收器 |
-XX:+UseParallelGC |
CMS |
CMS垃圾回收器 |
-XX:+UseConcMarkSweepGC |
G1 |
G1垃圾回收器 |
–XX:+UseG1GC |
ZGC |
ZGC垃圾回收器 |
-XX:+UseZGC |
六、查看当前使用的垃圾回收器
- 例如:
java -XX:+PrintCommandLineFlags -version
wuyanbodeMacBook-Air:~ wuyanbo$ java -XX:+PrintCommandLineFlags -version
-XX:G1ConcRefinementThreads=4 /
-XX:GCDrainStackTargetSize=64 /
-XX:InitialHeapSize=134217728 /
-XX:MaxHeapSize=2147483648 /
-XX:+PrintCommandLineFlags /
-XX:ReservedCodeCacheSize=251658240 /
-XX:+SegmentedCodeCache /
-XX:+UseCompressedClassPointers /
-XX:+UseCompressedOops -XX:+UseG1GC
java version "11.0.4" 2019-07-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.4+10-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.4+10-LTS, mixed mode)
七、JVM内存模型(java8+)