saowu's Blog

JVM 相关记录

JVM 相关记录
2020-04-06 · 4 min read
Java

一、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信息
    • vmid:虚拟机进程号
 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+)

Copyright © 2020 - 2024 saowu. All Right Reserved
Powered by Gridea