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

面试八股之JVM篇3.5——垃圾回收——G1垃圾回收器

🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。

✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!

🔥个人主页:Ethan Yankang
🔥专栏:面试八股文||Java项目

🔥本篇概览:详细讲解了G1垃圾回收器的工作原理


 

目录

 3.6 详细聊一下G1垃圾回收器

3.6.1 概述

3.6.2 Young Collection(年轻代垃圾回收)

3.6.3 Young Collection + Concurrent Mark (年轻代垃圾回收+并发标记)

3.6.4 Mixed Collection (混合垃圾回收)


3.6 详细聊一下G1垃圾回收器

难易程度:☆☆☆☆

出现频率:☆☆☆☆

3.6.1 概述
  • 应用于新生代和老年代,在DK9之后默认使用G1

  • 划分成多个区域,每个区域都可以充当 eden,survivor,old, humongous,其中 humongous 专为大对象准备

  • 采用复制算法

  • 响应时间与吞吐量兼顾

  • 分成三个阶段:新生代回收、并发标记、混合收集

  • 如果并发失败(即回收速度赶不上创建新对象速度),会触发 Full GC

3.6.2 Young Collection(年轻代垃圾回收)
  • 初始时,所有区域都处于空闲状态

  • 创建了一些对象,挑出一些空闲区域作为伊甸园区存储这些对象

  • 当伊甸园需要垃圾回收时,挑出一个空闲区域作为幸存区,用复制算法复制存活对象,需要暂停用户线程

  • 随着时间流逝,伊甸园的内存又有不足

  • 将伊甸园以及之前幸存区中的存活对象,采用复制算法,复制到新的幸存区,其中较老对象晋升至老年代

3.6.3 Young Collection + Concurrent Mark (年轻代垃圾回收+并发标记)

当老年代占用内存超过阈值(默认是45%)后,触发并发标记,这时无需暂停用户线程

  • 并发标记之后,会有重新标记阶段解决漏标问题,此时需要暂停用户线程。

  • 这些都完成后就知道了老年代有哪些存活对象,随后进入混合收集阶段。此时不会对所有老年代区域进行回收,而是根据暂停时间目标优先回收价值高(存活对象少)的区域(这也是 Gabage First 名称的由来)。

3.6.4 Mixed Collection (混合垃圾回收)

复制完成,内存得到释放。进入下一轮的新生代回收、并发标记、混合收集

其中H叫做巨型对象,如果对象非常大,会开辟一块连续的空间存储巨型对象



💖💖💖​​​​​​​💖​​​​​​​💖​​​​​​​💖​​​​​​​💖​​​​​​​💖​​​​​​​💖​​​​​​​💖💖💖💖💖​​​​​​​💖​​​​​​​💖​​​​​​​💖​​​​​​​💖​​​​​​

热门专栏推荐

​​​​​​​

🌈🌈计算机科学入门系列                     关注走一波💕💕

🌈🌈CSAPP深入理解计算机原理        关注走一波💕💕

🌈🌈微服务项目之黑马头条                 关注走一波💕💕

🌈🌈redis深度项目之黑马点评            关注走一波💕💕

🌈🌈Java面试八股文系列专栏            关注走一波💕💕

🌈🌈算法leetcode+剑指offer               关注走一波💕💕


📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤ 分享👥 留言💬thanks!!!
📚愿大家都能学有所得,功不唐捐!

http://www.lryc.cn/news/352882.html

相关文章:

  • 解决LabVIEW通过OPC Server读取PLC地址时的错误180121602
  • npm,yarn,cnpm,tyarn,pnpm 安使用装配置镜像
  • 使用python将一段文本写入一个txt文件中且先格式化文件名
  • 前端 CSS 经典:元素倒影
  • ROS学习记录:用C++实现IMU航向锁定
  • 设计模式-策略模式-使用
  • WebSocket——相关介绍以及后端配置
  • 单片机设计注意事项
  • Ubuntu 如何根据NVIDIA显卡型号确定对应的显卡驱动版本并安装
  • 如何选择一款安全高效的数据自动同步工具?
  • 【linux】docker下nextcloud安装人脸识别插件
  • 2. C++服务器编程-信号
  • C#_库的引用
  • C++:STL—算法
  • 深入探索:移动云服务器的强大之处
  • 线性表(从数据结构的三要素出发)
  • [SCTF2019]babyre
  • uniapp实现下拉过滤查询列表
  • C++—— set、map、multiset、multimap的介绍及使用
  • STM32 学习——1. STM32最小系统
  • react实现table可拖拽表头(给react-jss样式传递参数、滚动条样式)
  • 如何跨过robots协议的限制爬取内容?
  • Parasoft C++Test软件静态分析操作指南_编码规范/标准检查
  • [AIGC] CompletableFuture如何实现任务链式调用?
  • 神奇动物在哪里?斯洛文尼亚旅游之野生动物寻踪
  • 电商项目之有趣的支付签名算法
  • Web开发核心
  • 【Python】【Scrapy 爬虫】理解HTML和XPath
  • 【CTF Web】CTFShow web5 Writeup(SQL注入+PHP+位运算)
  • LeetCode 968.监控二叉树 (hard)