JVM四种垃圾回收算法以及G1垃圾回收器(面试)

JVM 垃圾回收算法

标记清除算法 :标记清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段

在标记阶段通过根节点 ,标记所有从根节点开始的对象。然后,在清除阶段,清除所有未被标记的对象
适用场合存活对象较多的场景下比较高效

缺点:容易产生内存碎片

复制算法:从根节点进行扫描,标记出所有的存活对象 ,然后将这些存活的对象复制到一块新的内存上 ,之后将原来的旧内存全部回收
适用场合 : 存活对象较少的情况下比较高效

缺点:复制过程需要一块儿空的内存空间,对内存消耗较大。
标记整理算法 :是标记清除算法的优化版本

在标记阶段通过根节点(GC Roots) ,标记所有从根节点开始的对象。但在清除阶段,它会将所有的存活对象压缩到内存的一端再清理边界外所有的空间 。避免了内存碎片的产生

分代回收:分代收集算法就是目前虚拟机使用的回收算法 ,一般情况下将堆区划分为老年代和新生代

垃圾回收器

G1垃圾回收器使用分代回收算法,任何垃圾回收器在进行工作的时候都会出现 STW,Stop the World 停止用户线程程

G1 全称 Garbage-First 通过将堆内存划分为多个 Region 来实现可预测的停顿时间模型。在 G1 当中,新生代和老年代已经不再是物理隔离,而都是被划分一个个 Region 区域

G1 垃圾回收器的整个实现过程分为四个步骤:

  1. 初始标记:标记根节点的直接关联对象。这个阶段会STW;
  2. 并发标记:通过根节点找到存活的对象。这个阶段 GC 线程是与用户线程同时运行的
  3. 最终标记:修正并发标记过程中因用户线程继续运行而导致产生新的引用更新。同样的这里也需要 STW;
  4. 筛选回收:筛选回收这里会对每个 Region 的回收成本进行排序,根据用户期望的停顿时间来制定收回计划。这个阶段 GC 线程是与用户线程同时运行的
相关推荐
m0_736927046 分钟前
Spring Boot项目中如何实现接口幂等
java·开发语言·spring boot·后端·spring·面试·职场和发展
渡我白衣7 分钟前
C++:链接的两难 —— ODR中的强与弱符号机制
开发语言·c++·人工智能·深度学习·网络协议·算法·机器学习
小龙报14 分钟前
《算法通关指南:数据结构和算法篇 --- 顺序表相关算法题》--- 1.移动零,2.颜色分类
c语言·开发语言·数据结构·c++·算法·学习方法·visual studio
im_AMBER31 分钟前
Leetcode 43
笔记·学习·算法·leetcode
ceffans41 分钟前
PDF文档中表格以及形状解析-后续处理(线段生成最小多边形)
c++·windows·算法·pdf
mifengxing1 小时前
力扣每日一题——接雨水
c语言·数据结构·算法·leetcode·动态规划·
前端老宋Running1 小时前
前端防抖与节流一篇讲清楚
前端·面试
魔云连洲2 小时前
前端树形结构过滤算法
前端·算法
小龙报2 小时前
《算法通关指南:数据结构和算法篇 --- 顺序表相关算法题》--- 询问学号,寄包柜,合并两个有序数组
c语言·开发语言·数据结构·c++·算法·学习方法·visual studio
小南家的青蛙3 小时前
LeetCode LCR 085 括号生成
算法·leetcode·职场和发展