【深入理解Java虚拟机 笔记】垃圾回收算法

2023-05-16

前言

  当前垃圾回收集器大多都是遵循分代收集理论进行设计的,先聊聊什么是分代收集:
(1)弱分代假说:绝大多数对象都是朝生夕灭的;
(2)强分代假说:熬过多次垃圾收集过程的对象就越难消亡;
(3)跨代引用假说:跨代引用相对于同代引用来说仅占极少数。

  Java堆一般被分为两个区域:新生代和老年代。根据不同区域的垃圾收集,设计了不同的垃圾收集器:
(1)新生代收集(Minor GC / Young GC)
(2)老年代收集(Major GC / Old GC)
(3)混合收集(Mixed GC)
(4)整堆收集(Full GC)

  ok,我们回归正题,Java虚拟机中有哪些垃圾回收算法呢?

  • 标记-清除算法(Mark-Sweep)
  • 标记-复制算法(Mark-Copy)
  • 标记-整理算法(Mark-Compact)

标记-清除 算法

在这里插入图片描述
如图所示,标记-清除算法进行2步操作:
Step1:标记出需要回收的对象(图中红色);
Step2:统一回收掉被标记的对象(红色改灰色)。

标记-清除 的缺点:可用内存缩小了一半,浪费空间比较多。

标记-复制 算法

在这里插入图片描述
如图所示,标记-复制算法进行4步操作:
Step1:将内存划分成相等的两块,只使用其中一块;
Step2:标记出需要回收的对象(图中红色);
Step3:将存活的对象复制到另外一块内存区(图中:左边复制到右边);
Step4:清理掉刚使用过的那块内存区(红色改灰色)。

标记-复制 的缺点:在对象存活率高时,需要进行很多复制操作,效率会降低。

标记-整理算法

在这里插入图片描述
如图所示,标记-整理算法进行3步操作:
Step1:标记出需要回收的对象(图中红色);
Step2:将存活的对象移向内存一端;
Step3:清除掉其它内存(除移动的内存外,全改为灰色)。

标记-整理 的缺点:存在大量存活对象的区域,移动存活对象是一个很负重的操作,而且对象移动操作必须全程暂停用户应用程序,会造成“Stop The Word”现象。

总结

  3种垃圾回收算法各有其优缺点,设计者们在设计的时候根据不同区域对象的特点选择合适的算法,如:
CMS收集器基于 标记-清除 算法;
Serial、ParNew收集器基于 标记-复制算法;
Parallel Scavenge收集器基于 清除-整理 算法。

此笔记主要是记录几个算法的基本思想,文中3张图是本文的核心思想,对于许多细节没有展开!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【深入理解Java虚拟机 笔记】垃圾回收算法 的相关文章

随机推荐

  • matlab中函数的定义和使用

    在matlab的选择框中的的新建中选择新建函数 xff0c 一般是以 m的文本文件 xff0c 新建后我们可以在里面写入我们的实现函数 xff0c 现在我们给出两个实例看一下 xff0c 分别是简单的求和和Fibonacci sequenc
  • matlab简单绘图plot,subplot

    a1 二维绘图plot的实现 subplot n m x 建立一个m n的绘图区域 xff0c 然后分别在其x 61 1 xff0c 2 xff0c 3 xff0c 4 区域绘制图像 function 61 plot1 x 61 0 0 3
  • python 函数的定义和应用

    1 xff0c 函数定义和使用 xff1a def substract sub a sub b sub res 61 sub a sub b return sub res sub test 61 substract 10 20 print
  • Linux shell中的-d,-f,-e,-n的作用

    1 xff0c d gt dirtionnary 判断目录是否存在 例 xff1a d tmp 返回为真便是 tmp是文件夹目录 2 xff0c e gt exist 判断是否存在 例 xff1a e filename 返回为真表示file
  • 「第四范式」2023届-秋季校园招聘正式启动!

  • Linux下用nginx和naxsi搭建web防火墙

    Linux下用nginx和naxsi搭建web防火墙 Naxsi Naxsi是一个开源 xff0c 高性能 xff0c 地位会规则 xff0c nginx的web应用程序防火墙模块 xff0c 著名的web服务器和反向代理 xff0c 它的
  • 【语义分割】类别不平衡损失函数合集

    在语义分割领域 xff0c 我们会常常遇到类别不平衡的问题 比如要分割的目标 xff08 前景 xff09 可能只占图像的一小部分 xff0c 因此负样本的比重很大 xff0c 导致网络倾向于将所有样本判断为负样本 本文介绍了在数据不平衡时
  • 小张学linux内核:十四. elf文件的加载和进程切换寄存器的保存

    重点关注虚拟内存的切换 xff0c pgd xff0c mm struct start code xff1b 理清楚这三个概念 pgd不是在这里设置的遵循COW xff0c 是在写时缺页中断填充的 start code只是一个段开始的标记
  • linux软中断和系统调用深入研究

    arm软中断模式 arm7种模式 有中断模式 xff0c 但是并没有软中断模式 那么arm的软中断是什么呢 xff1f arm的软中断是arm从用户模式切换到特权模式 xff0c 也就是linux中从用户态切换到内核态的过程 swi命令触发
  • 进程proc文件介绍

    进程proc文件 proc pid 下是每个进程的proc信息 xff0c proc self比较特殊 xff0c 哪个进程打开 xff0c 对应链接到哪个进程 1 xff09 内存相关 status xff1a 进程使用虚拟内存和物理内存
  • Win10系统下安装CAA二次开发程序,VS界面上不出现CAA菜单栏或菜单栏为灰色的

    问题描述 xff1a Win10系统下安装了CATIA CAA V5R19和V4R24两个版本 xff0c 其中V5R19版本安装完成后VS2005中没有出现CAA菜单栏 xff0c V5R24安装完成后VS2008中出现部分集成菜单且为灰
  • 基于Stm32的4G模块实现内网透传通信(代码后附)

    基于Stm32的4G模块实现内网透传通信 一 内网透传即内网映射 xff0c 内网IP端口映射外网连接访问过程的实现 内网透传通信实现过程又有以下几种区别 xff1a 1 xff09 路由器映射 适合自己本地路由有公网IP网络环境 xff0
  • RoboCup智能机器人足球教程(二)

    RoboCup智能机器人足球教程 xff08 二 xff09 运行方式 RoboCup2D仿真平台通过一个服务端 xff0c 若干客户端联系而成 xff0c 同时通过监视器进行画面播放 当启动服务端后 xff0c 客户端通过改写程序内部的c
  • RoboCup智能机器人足球教程(三)

    RoboCup智能机器人足球教程 xff08 三 xff09 实现守门员代码 守门员逻辑实现比较容易 xff0c 但是最好开始的时候画好流程图 xff0c 理顺逻辑 xff0c 守门员一直盯着球 xff0c 当球距离守门员够近的时候 xff
  • 嵌入式工作一年总结

    其实这是去年2017年11月份写的 xff0c 现在想把这个发出来 xff0c 为后来的同学或者迷茫的一些同学的一些建议吧 xff01 刚入行回忆 刚开始进入公司的能力很差 xff0c 可以说什么都不会吧 xff0c wifi拼成wife
  • CVPR 2019 | 旷视研究院提出新型损失函数:改善边界框模糊问题

    全球计算机视觉三大顶会之一 CVPR 2019 xff08 IEEE Conference on Computer Visionand Pattern Recognition xff09 将于 6 月 16 20 在美国洛杉矶如期而至 届时
  • ros中使用opencv处理图像

    cv bridge toCvCopy xff1a ROS下的sensor msgs ImageConstPtr xff0c 和图像压缩类型 xff08 例如 xff1a sensor msgs image encodings RGB8 xf
  • PX4飞行日志分析与.ulg文件格式转换

    文章目录 一 FlightPlot安装及使用二 ulg文件格式转换 xff08 windows环境 xff09 一 FlightPlot安装及使用 span class token number 1 span xff09 下载FlightP
  • 【深入理解Java虚拟机 笔记】Java的类加载过程

    类加载的过程如下图所示 xff1a 一 加载阶段 注意 xff1a 这里的 加载 阶段是整个 类加载 过程的一个阶段 xff0c 两个词的含义是不一样的 这个阶段主要做3件事 xff1a 1 通过类的全限定名获取二进制字节流 xff1b 2
  • 【深入理解Java虚拟机 笔记】垃圾回收算法

    前言 当前垃圾回收集器大多都是遵循分代收集理论进行设计的 xff0c 先聊聊什么是分代收集 xff1a xff08 1 xff09 弱分代假说 xff1a 绝大多数对象都是朝生夕灭的 xff1b xff08 2 xff09 强分代假说 xf