当前位置: 首页 > news >正文

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 线程是与用户线程同时运行的
http://www.lryc.cn/news/437610.html

相关文章:

  • Python 数学建模——Vikor 多标准决策方法
  • 计算机网络八股总结
  • AMD CMD UMD CommonJs ESM 的历史和区别
  • 人工智能数据基础之微积分入门-学习篇
  • 【PSINS】ZUPT代码解析(PSINS_SINS_ZUPT)|MATLAB
  • 多态(上)【C++】
  • 如何驱动一枚30年前的音源芯片,YMF288驱动手记 Part2
  • yarn webpack脚手架 react+ts搭建项目
  • 防蓝光护眼灯有用吗?五款防蓝光效果好的护眼台灯推荐
  • Mac使用Elasticsearch
  • DevOps -CI/CD 与自动化部署
  • 单体架构系统是不是已经彻底死亡?
  • mathorcup发邮件:参赛必看邮件撰写技巧?
  • ESP01烧入AT出厂固件
  • Qt 开发:深入详解 Qt 的信号与槽机制——彻底搞懂QT信号与槽
  • 民间故事推广系统小程序的设计
  • 关于武汉芯景科技有限公司的IIC缓冲器芯片XJ4307开发指南(兼容LTC4307)
  • C++ 异常
  • ST官方 VSCode 插件安装及配置工程参考
  • 使用Pandas读取和写入数据库的Python函数实现
  • Redis——常用数据类型hash
  • 基于Python实现一个庆祝中秋节的小程序
  • 近期最值得买的数码好物有什么?2024兼具功能和实用性的好物分享
  • 云服务器中的MinIO 配置 HTTPS 过程(图文)
  • 注册安全分析报告:熊猫频道
  • 计算机毕业设计 自习室座位预约系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • 2000-2021年3月海关数据库
  • 【YashanDB知识库】archivelog磁盘满导致数据库abnormal
  • 远程跨境传输大文件如何做到安全又稳定?
  • JSON报文根据正则过滤消息