天天看点

深入理解JVM(五)JVM监测工具、GC调优JVM 监测工具GC 调优

JVM 监测工具

jps:查看Java进程

jstat:只能查看当前时刻的内存情况;可以查看新生代、老生代中的内存使用情况

jmap: 查看堆内存的占用情况;也可以执行dump操作

jconsole:图形化的监控界面

jvisualvm:监视-堆Dump-查找最大对象,从中可以发现,当前进程中是哪个对象占据了最大的内存,从而对这个对象进行分析。

通过VM参数也可以是实现当内存溢出是,自动将溢出时刻的内存dump下来:

-Xms 100m
-Xms 100m
-XX:+HeapDumpOnOutOfMemoryError
           

GC 调优

GC调优实际上是一种取舍。在调优前,必须明确要调整的方向:

GC的发展:

JVM自身在GC上进行了很多次的改进升级:

JVM默认的GC:CMS GC(jdk9之后逐步被废弃) -> G1 GC(jdk9) -> Z GC(jdk11)

  • Serial GC

    串行GC,是一种在单核环境下的串行回收器,当GC回收时,其他线程必须等待

  • Parallel GC

    并行GC,在串行GC的基础上,使用了多线程技术。提高吞吐量

  • CMS GC

    CMS使用多线程技术,使用“清除-标记”算法,可极大地提高效率(尤其是在减低延迟上有很大的提升)。但是参数设置繁琐,对开发者技术要求高。

-G1 GC

jdk9默认开始使用的GC。特点:将堆内存划分为很多大小相等的region,并对这些区域使用状态进行标记。一般GC在进行回收时,快速定位出哪些region是空闲的、哪些有垃圾对象。从而提高GC回收效率。G1使用的是“标记-整理”算法。

  • Z GC

    jdk11开始提供全新的GC,回收TB级别的垃圾在毫秒级别。

从生命周期角度来划分,GC可以划分为Minor GC 和Full GC

Minor GC: 回收新生代的对象

Full GC : 回收整个堆空间