Java-JVM-垃圾回收器
2021/11/30 20:38:38
本文主要是介绍Java-JVM-垃圾回收器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
垃圾回收器都有那些?
单线程垃圾回收器:Serial、Serial Old
多线程垃圾回收器:ParNew、Parallel、Parallel Old
并发垃圾回收器:CMS,G1
你最了解那一款垃圾回收器
都知道一点吧,比如说单线程的Serial、SerialOld,适合用在一些单核的CPU中,比如说一些嵌入式
然后ParNew的话是一个独立的年轻代的垃圾回收器,是第一款多线程的垃圾回收器,是Serial的多线程的的版本
随后就是 Parallel 是JDK8中的默认的垃圾的回收器,以吞吐量优先的的垃圾回收器
再然后就是CMS,这是在JDK 1.5的时候推出的划时代的并发回收器,第一次实现了垃圾收集线程和用户线程同时的工作。关注点在于如何更好的停顿时间,在一些服务器端会带来更好的体验
随后就是在JDK1.7的u4版本中可用的G1垃圾回收器,以良好的吞吐量为优先,目标是在低延迟的情况下得到更好的吞吐量,担任的全功能的垃圾回收期
你了解CMS的垃圾回收算法吗?
CMS是一个并发的垃圾回收器,所以说,大概有以下这几个过程
- 初始化标记阶段,标记处GC Roots
- 并发标记阶段,这个阶段会根据GC Roots进行向下标记,但是并不会造成STW
- 重新标记阶段,这个阶段可能会造成一些垃圾回收的浮动垃圾,于是就会进行重新的标记
- 垃圾清除阶段:这个是一个并发的清除的过程,所以说采用的是标记清除算法,如果使用压缩,以防止干扰用户线程
那G1的垃圾回收算法呢
G1垃圾回收是基于Region分区的,它把整个堆在逻辑上拆分成了老年代、年轻代,随后避免全堆的收集,有一个可以遇见的时间模型,根据一个优先的列表在运行收集的时间内。优先回收价值比较大的Region,所以说也就叫垃圾优先,G first。
他的垃圾回收主要分为
- 年轻代gC
- 老年代的并发标记
- 混合回收
- 还有独占的、单线程的Full GC
年轻代的GC主要有
- 扫描根
- 更新Result集合
- 处理RSet集合
- 复制对象
- 处理引用
并发标记的过程有
- 初始化标记阶段:这个阶段会触发一次年轻代的GC
- 根区域扫描
- 并发标记
- 再次标记
- 独占清理
- 并发清理
Full GC
如果上述的垃圾算法都无法满足,那么就会触发Full GC,Full GC 会造成长时间的程序停顿
这篇关于Java-JVM-垃圾回收器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南
- 2024-09-30Dnd-Kit学习:新手快速入门指南