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

news/2025/1/22 19:10:13/

JVM 垃圾回收算法

标记清除算法:标记清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段
在标记阶段通过根节点,标记所有从根节点开始的对象。然后,在清除阶段,清除所有未被标记的对象
适用场合存活对象较多的场景下比较高效
缺点:容易产生内存碎片
复制算法:从根节点进行扫描,标记出所有的存活对象,然后将这些存活的对象复制到一块新的内存上,之后将原来的旧内存全部回收
适用场合: 存活对象较少的情况下比较高效
缺点:复制过程需要一块儿空的内存空间,对内存消耗较大。
标记整理算法:是标记清除算法的优化版本
在标记阶段通过根节点(GC Roots),标记所有从根节点开始的对象。但在清除阶段,它会将所有的存活对象压缩到内存的一端再清理边界外所有的空间。避免了内存碎片的产生
分代回收:分代收集算法就是目前虚拟机使用的回收算法,一般情况下将堆区划分为老年代和新生代

垃圾回收器

G1垃圾回收器使用分代回收算法,任何垃圾回收器在进行工作的时候都会出现 STW,Stop the World 停止用户线程程
G1 全称 Garbage-First 通过将堆内存划分为多个 Region 来实现可预测的停顿时间模型。在 G1 当中,新生代和老年代已经不再是物理隔离,而都是被划分一个个 Region 区域
G1 垃圾回收器的整个实现过程分为四个步骤:

  1. 初始标记:标记根节点的直接关联对象。这个阶段会STW;
  2. 并发标记:通过根节点找到存活的对象。这个阶段 GC 线程是与用户线程同时运行的
  3. 最终标记:修正并发标记过程中因用户线程继续运行而导致产生新的引用更新。同样的这里也需要 STW;
  4. 筛选回收:筛选回收这里会对每个 Region 的回收成本进行排序,根据用户期望的停顿时间来制定收回计划。这个阶段 GC 线程是与用户线程同时运行的
文章来源:https://blog.csdn.net/kiku1002149488/article/details/142256969
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/1525771.html

相关文章

Linux面试题3

1. 描述Linux操作系统的安装过程。 以下是关于Linux操作系统的安装过程的描述: 选择发行版:首先,您需要选择一个Linux发行版,如Ubuntu、Fedora、Debian等。不同的发行版有不同的特点和适用场景,您可以根据自己的需求…

【物联网技术大作业】设计一个智能家居的应用场景

前言: 本人的物联网技术的期末大作业,希望对你有帮助。 目录 大作业设计题 (1)智能家居的概述。 (2)介绍智能家居应用。要求至少5个方面的应用,包括每个应用所采用的设备,性能&am…

Excel--不规则隔行填充底纹颜色

巧用条件格式快速给小计和总计行填充不同颜色。 先选择整个表格(选中第一行,按住Shift双击边框即可选中整个表格) 新建条件格式-使用公式确定要设置格式的单元格,输入$B3"小计:",设置格式&…

【Python 数据分析学习】Pandas的基础和应用(2)

题目 1 数据运算与分析1.1 算数和比较运算1.1.1 算数运算1.1.2 比较运算 1.2 数据排列1.3 统计分析1.3.1 基本的统计分析函数1.3.2 特殊的统计分析函数1.3.3 检查和处理空值 1.4 分组与聚合1.4.1 数据分组1.4.2 数据聚合 1.5 透视交叉表1.5.1 透视表1.5.2 交叉表 2 实战演练2.1…

一个用于翻译 CSV 文件的 Python 脚本,适用于将英文内容批量翻译成中文(或其他语言),并解决文件编码导致的中文乱码和无法翻译的问题。

将CSV文件中的英文批量翻译成中文的 Python 脚本 一个用于翻译 CSV 文件的 Python 脚本,适用于将英文内容批量翻译成中文(或其他语言),并解决文件编码导致的中文乱码和无法翻译的问题。 主要功能: 文件编码转换&…

Redis——初识Redis

初识Redis Redis认识Redis 分布式系统单机架构为什么要引入分布式理解负载均衡数据库的读写分离引入主从数据库 引入缓存数据库分库分表业务拆分——微服务常见概念了解 Redis背景介绍特性应用场景Redis不能做的事情Redis客户端redis客户端的多种形态 Redis 认识Redis 存储数…

定时中断键盘灯闪烁

在学习完《趣味定时器》后,是不是只在 dmesg 里看到效果很没劲,这次来点更实际的,我们让键盘灯闪起来。 对于定时器,就不多说了,接下来了解下键盘的基本内容。键盘在 Linux 里是属于TTY(TeleTYpe)设备,既然我们要用到键盘,那先找其通用驱动代码,在 Linux Kernel 源码d…

golang学习笔记14——golang性能问题的处理方法

推荐学习文档 基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总golang学习笔记01——基本数据类型golang学习笔记02——gin框架及基本原理golang学习笔记03——gin框架的核心数据结构golang学习笔记04——如何真正写好Golang代码&…