ZGC这是要上天吗?

img

现在JVM部分回收器介绍

可能我们目前在使用的是CMS垃圾回收器或者是G1垃圾回收器或者什么没有设置使用的是jdk默认的垃圾回收器。

我们如何来查看我们目前默认使用的jdk垃圾回收器呢?

可以使用如下命令:

java -XX:+PrintCommandLineFlags -version

img

我本地的jdk1.8.0_151默认的垃圾回收器是就是-XX:+UseParallelGC,其实jdk1.7.x默认的回收器也是-XX:+UseParallelGC

添加日志

-verbose:gc   
-XX:+HeapDumpOnOutOfMemoryError  
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 
-XX:+PrintGCDateStamps  
-Xloggc:/appl/gclogs/gc.log

备注:-Xloggc的目录需要提前建好。

img

通过上面日志分析得出,PSYoungGen、ParOldGen、PSPermGen属于Parallel收集器。

通过上面2个方法都可以看出来jdk8默认是PS垃圾回收器。

Parallel Scavenge 收集器更关注系统的吞吐量。可以通过参数来打开自适应调节策略(默认是打开的,-XX:+UseAdaptiveSizePolicy,可以使用jinfo -flag UseAdaptiveSizePolicy pid进行查看,JVM菜鸟进阶高手之路九(解惑)里面有提到过。),虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或最大的吞吐量;

-XX:+PrintFlagsInitial表示打印出所有XX选项的默认值,-XX:+PrintFlagsFinal表示打印出XX选项在运行程序时生效的值。

由于业务系统是OLTP系统,这个应该以最小停顿先,应该用cms收集器 ,配置为-XX:+UseConcMarkSweepGC即可。

jdk1.9 默认垃圾收集器G1 -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC

我们所了解的JVM垃圾回收期组合:

img

ZGC介绍

可能我们到G1就觉得非常完美了,下面介绍的这个ZGC,那简直是说要上天啊。

ZGC回收机预计在jdk11支持,ZGC目前仅适用于Linux / x64 。和G1开启很像,用下面参数即可开启:

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC

ZGC垃圾收集器,也称为ZGC,是一个可扩展的低延迟垃圾收集器,有如下特性:

  • 暂停时间超过10毫秒
  • 暂停时间不会随堆或实时设置大小增加
  • 处理堆范围从几百M几TB

ZGC特性:

  • Concurrent
  • Region-based
  • Compacting
  • NUMA-aware
  • Using colored pointers
  • Using load barriers

总结

如果ZGC垃圾回收器真的可以做到暂停时间不到10ms,那岂不是逆天了,很多对性能有要求的都是c++写就是因为没有gc影响,那么如果真的就10ms左右,那么java的地位岂不是又将大大提升。零度非常期待ZGC。

一切太美好,我想这个真的到来应该还有段时间,把代码写好,注意一些细节也是王道,期待JAVA越来越好。

本人其他JVM菜鸟进阶高手之路相关文章


如果读完觉得有收获的话,欢迎点赞、关注、加公众号【匠心零度】,查阅更多精彩历史!!!

img

猜你喜欢

转载自blog.csdn.net/lirenzuo/article/details/81182686
ZGC