JVM:调优

什么时候会发生垃圾回收

  • MinorGC:Eden区或者S区不够用了
  • MajorGC:老年代不够用了
  • FullGC = MinorGC + MajorGC + MetaSpace GC
  • System.gc()(该方法不会立即唤起gc )

什么时候需要调优

  • 出现问题:频繁GC?cpu高--->打印GC日志--->结合工具查看---> 修改堆内存空间/垃圾收集器选择
  • cpu持续飙升:top查看哪个进程cpu使用率高--->查看可能的情况情况:线程/堆栈/jvm参数 jstack/jinfo/jmap--->
  • oom:dump文件,分析dump文件--->MAT/其他工具

如何调优

1、调整堆大小(调大):Xms、Xmx

  • 提高吞吐量
  • GC次数减少
  • 停顿时间变大(空间变大了,打扫时间变长)

2、设置停顿时间(G1)(调小):-XX:MaxGCPauseMillis=15

  • 停顿时间变小
  • GC次数变多
  • 吞吐量无太大变化
    切记不要手动调整young区大小,设置停顿时间的时候会自适应地调整young区的大小。

3、启动并发GC时(堆内存使用占比)调

G1和CMS的区别

  • CMS:标记-清除 空间碎片;G1:标记-整理 减少空间碎片
  • CMS:分新生代老年代。引用Card Table;G1:分region,物理上不分young和old区,只有逻辑上区分。Remerbered Set RSet,谁引用了我
  • G1:多核、大内存,G1停顿时间。

总结

原文地址:https://www.cnblogs.com/fcb-it/p/13363504.html