现在JVM部分回收器介绍
可能我们目前在使用的是CMS垃圾回收器或者是G1垃圾回收器或者什么没有设置使用的是jdk默认的垃圾回收器。
我们如何来查看我们目前默认使用的jdk垃圾回收器呢?
可以使用如下命令:
java -XX:+PrintCommandLineFlags -version
我本地的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的目录需要提前建好。
通过上面日志分析得出,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垃圾回收期组合:
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菜鸟进阶高手之路相关文章
如果读完觉得有收获的话,欢迎点赞、关注、加公众号【匠心零度】,查阅更多精彩历史!!!