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

JVM垃圾回收篇-垃圾回收算法

JVM垃圾回收篇-垃圾回收算法

标记清除(Mark Sweep)

在这里插入图片描述

概念

collector指的就是垃圾收集器。
mutator是指除了垃圾收集器之外的部分,比如说我们的应用程序本身。
mutator的职责一般是NEW(分配内存)、READ(从内存中读取内容)、WRITE(将内容写入内存),而collector则就是回收不在使用的内存来供mutator进行NEW操作的使用

步骤
  • 在标记阶段collector从mutator根对象开始进行遍历,对从mutator根对象可以访问到的对象都打上一个标识,一般是
    在对象的header中,将其记录为可达对象
  • 而在清除阶段,collector对堆内存(heap memory)从头到尾进行线性遍历,如果发现某个对象没有被标记为可达对象,通过读取对象的header信息,将其回收。一种可行的实现是,在标记阶段首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引用的垃圾对象。然后在清除阶段清除所有未被标记的对象
优缺点

标记清除算法清除阶段不会对内存进行置0操作,而是将空闲内存的地址加入空闲内存地址列表中,等下次使用时直接使用,但是由于这些内存是不连续的,总内存大小可能很大,但是实际被分为很多小段

  • 优点是速度较快
  • 缺点是会造成内存碎片

标记整理(Mark Compact)

在这里插入图片描述

标记操作和 “标记 - 清除” 算法一致,后续操作不只是直接清理对象,而是在清理无用对象完成后让所有存活的对象都向一端移动,并更新引用其对象的指针

优缺点

优点:没有内存碎片

缺点:速度慢

复制(Copy)

在这里插入图片描述

将内存空间分为相等的两部分,正在使用的区为FROM,空闲区为TO

  • 当from区内存空间不足时,将from区的存活对象先标记然后复制到to区,并清理form区的垃圾
  • 交换from区和to区,即当前的form变为to,当前的to变为form
优缺点

优点:不会有内存碎片

缺点:需要占用双倍的内存空间

分代垃圾回收

在这里插入图片描述

  • 对象首先分配在伊甸园区域

  • 新生代空间不足时,触发 minor gc,伊甸园和 from 存活的对象使用 copy 复制到 to 中,存活的对象年龄加 1并且交换 from to

  • minor gc 会引发 stop the world,暂停其它用户的线程,等垃圾回收结束,用户线程才恢复运行

  • 当对象寿命超过阈值时,会晋升至老年代,最大寿命是15(4bit)

  • 当老年代空间不足,会先尝试触发minor gc,如果之后空间仍不足,那么触发 full gc,STW的时间更长

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

相关文章:

  • android APP内存优化
  • mysql_docker主从复制_实战_binlog混合模式_天座著
  • 鸿蒙开发学习笔记1——真机运行hello world
  • Java数组,简简单单信手沾来~
  • 认识SourceTree
  • python之列表推导式
  • selenium自动化测试之搭建测试环境
  • 模拟实现消息队列(以 RabbitMQ 为蓝本)
  • WordPress更换域名后-后台无法进入,网站模版错乱,css失效,网页中图片不显示。完整解决方案(含宝塔设置)
  • 无法正确识别车牌(Python、OpenCv、Tesseract)
  • VSCODE[配置ssh免密远程登录]
  • Multi-object navigation in real environments using hybrid policies 论文阅读
  • 初始多线程
  • 论坛项目day3|开发社区首页
  • Server - 文字转语音 (Text to Speech) 的在线服务 TTSMaker
  • Python学习笔记_基础篇_数据类型之字符串
  • (二分查找) 11. 旋转数组的最小数字 ——【Leetcode每日一题】
  • docker 制作tomcat镜像
  • 年之年的选择,组装版
  • 英语词法——代词
  • 1475.商品折扣后的最终价格
  • php、 go 语言怎么结合构建高性能高并发商城。
  • ubuntu 部署 ChatGLM-6B 完整流程 模型量化 Nvidia
  • 【数据分享】2001-2022年我国省市县镇四级的逐月最高气温数据(无需转发/Shp/Excel格式)
  • 线段树-模板-区间查询-区间修改
  • 微服务架构和分布式架构的区别
  • Ajax-概念、Http协议、Ajax请求及其常见问题
  • react 09之状态管理工具1 redux+ react-thunk的使用实现跨组件状态管理与异步操作
  • opencv实战项目 手势识别-实现尺寸缩放效果
  • Netty对HPACK头部压缩的支持