大家好,又见面了,我是你们的朋友全栈君。
1.GC分类
代码语言:javascript复制按线程数:并行垃圾回收器:Parallel Collector. 同一时间段内只有一个cpu执行垃圾回收操作.用户线程等待.
串行垃圾回收期:Serial Collector.同一时间段内可以有多个cpu执行垃圾回收操作,用户线程等待.
按压缩方式:压缩式,内存有序. 非压缩式:内存无序.
按工作方式:并发式,及并发GC,用户线程和垃圾回收器同时交替进行.
独占式,垃圾回收线程进行时,用户线程需要等待.
按工作区分:年轻代,老年代.
2.GC性能指标 吞吐量: 用户线程时间/ 垃圾回收执行时间 用户线程执行时间. 吞吐量优先意味着 单位时间内STW时间最短. 暂停时间:垃圾回收的时,用户线程等待的时间.暂停时间优先意味着stw的频率增加. 说明:吞吐量和暂停时间相当于竞争对手, 吞吐量优先意味着,线程的回收频率降低.STW时间即暂停时间加长. 暂停时间优先,意味着垃圾回收频率增强,吞吐量下降. 现在的标准:保证吞吐量的情况下,尽量降低暂停时间.
3.7款经典垃圾收集器和垃圾分代之间的关系
Serial GC最开始的GC, ParNew的多线程版本. ParallelGC在JDK1.6之后称为HotSpot默认GC. 2017年JDK9中G1变成默认的垃圾收集器,以替代CMS 2019年9月JDK13,增强ZGC
4.如何查看默认的垃圾收集器 jinfo -flag 相关垃圾回收器参数 进程ID
5.Serial回收器:串行回收器. 最早的垃圾回收期,单个cpu时运行效率高.由于运行Stw时间长,所以不适用于与用户交互性强的应用中.
6.ParNew 并行回收器:
-XX:ParallelGCThreads限制线程数量,默认开启和CPU数据相同的线程数
7.parallel回收器:吞吐量优先 同样是并行垃圾回收器.和ParNew不同的是Parallel 回收器可以调整吞吐量,可以设置自适应策略.开启自适应策略后,parallel回收器会根据内存情况自动设置年轻代晋升老年代的年龄参数,自动设置吞吐量和暂停时间的比例. parallel old 使用的是标记压缩回收算法,所以会产生stw,所以该回收器适合做后天工资支付,批量处理,订单处理的应用程序. parallel的参数设置有: -XX: UseParallelGC 手动开启Parallel回收器.jkd8默认开启. -XX: UseParallelOldGC 手动开启Parallel Old回收器.jkd8默认开启. 上面这两个参数关联,开启一个,默认开启另一个 -XX:ParallelGCThreads:设置年轻代并行收集器的线程数,一般与CPU数量相同,如果CPU数量大于8个,则值=3 (5*N/8) -XX:MaxGCPauseMillis:设置暂停时间 -XX:GCTimeRatio:设置吞吐量比例,默认99,取值范围0-100,也就是垃圾回收时间不超过1% -XX: UseAdaptiveSizePolicy:设置是否开启自适应测率
8.CMS并发回收器 Cms回收器主打低延迟. 在JDK1.5推出了Current Mark Sweep回收器主打低延迟.可以让用户线程和垃圾回收线程同时进行. 运行过程: 初始标记: 初始标记阶段,同样需要STW,只是初始阶段标记只标记与GOOT ROOTS 直接关联的对象.所以STW的时间很短. 并发标记:并发标记阶段用户线程和垃圾回收线程同时进行. 再次标记阶段:再标记阶段,标记在并发阶段产生的新垃圾对象,但是没有被标记为垃圾的对象. 清除阶段:采用了标记-清除算法,会产生内存碎片,无法采用标记-压缩算法是因为标记压缩的时候,用户正在使用的内存没法使用,就没法并发进行.
总结:如果想要最小化使用内存和cpu优先使用serial回收器,如果先要高吞吐量优先使用parallel,如果想要前台反应时间慢,优先使用cms,但是在jdk9将cms标为废弃.jdk14正式废弃.
9.G1整堆区域化分代回收器 Garbage First 是一个并行回收器.把堆内存分割为很多不想关的region区域,G1会根据region垃圾堆价值大小,维护一个优先列表,价值高的优先回收 优点:分代收集,小region之间使用复制算法.整体上算是标记-压缩算法.所以不会产生内存碎片,不会为了放置放对象,频繁出发垃圾回收.在内存较大的时候G1效率比cms好,内存小的时候CMS更好点.平衡点在6~8G.
10.垃圾回收器总结
11.GC日志分析
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/194985.html原文链接:https://javaforall.cn