初步认识Java垃圾回收算法

news2024/9/24 3:27:50

GCRoot指被栈上直接或间接引用的对象,或被本地方法栈直接或间接引用的对象,或被方法区引用的对象。
被引用的对象是不能被删除的。
如果对象跟GCRoot并没有直接或间接相连的关系,那么这些对象就可以被删除了。

标记-清理:将需要删除的对象标记一下,标记完了再扫描一遍,把含有标记的对象删掉。缺点:内存碎片
标记-整理:在清除这个位置的垃圾之后,后面的对象要补上来。缺点:对象前移,代价大
复制:将内存一分为二,假设叫一区,二区。首先在一区创建这些对象,然后去打标记,标记是否需要被删除,等到一区快满了的时候,并不将标记对象删除,而是将不需要删除的对象复制到二区,并且是紧凑复制,这样避免了内存碎片,需要删除的就不复制到二区了。这样开销也不大,因为每次只需要复制一个对象,不需要移动所有对象。缺点:2倍内存

GC过程是怎样的呢?

Young区:
对象都会在E区出生,当E区快满的时候就会触发GC,这个GC只是Young区域的GC,所以也叫Young GC。
Young GC采用复制算法,当E区快满的时候会把需要删除的对象打上标记,不需要删除的依次复制到S0区。

S区和E区的大小比例是S0:S1:E=1:1:8,这是因为对象朝生夕死,幸存下来的比较少。

两块S区是交替工作的。等到E区快满了之后,对E区对象进行打标,将不需要删除的对象复制到S0区,之后将E区和S1区的对象全部删除。
等下次E区快满了之后,再将S0区和E区的对象全部打标,将不需要删除的对象全部复制到S1区。
S0和S1交替使用作为幸存下来的区域,它比直接将内存一分为二的利用率高一些。
E+S1复制到S0,E+S0复制到S1,E+S1复制到S0,… 如此往复

Old区:
每一次Young GC,如果对象活下来了,它的年龄就会加1,直到它满了6岁,就不往S区复制了,直接到Old区了。原因是如果一个对象6次Young GC都没清理掉,那它可能存在很长一段时间,直接把它放到Old区来维护,省的每次都在S区复制了。
Old区除了存一些年龄大的对象,还会存一些大对象,大对象指的是对象占用的内存大。
等到Old区快满了,也会触发GC,这个GC叫做Old GC,Old GC同时会伴随着Young GC,所以它又叫Full GC。Full GC会引起 Stop The World,Stop The World就是整个Java程序暂停,全力的来进行垃圾回收,垃圾回收主要使用标记-清理 或 标记-整理 的算法。
现在我们明确了,标记-清理、标记-整理 主要用于Full GC,复制 主要用于Young GC。
年轻代比较有名的垃圾收集器是ParNew,老年代是CMS,他们分别用了复制算法和标记-清理算法来进行垃圾回收。新版的jdk已经不建议用以前的垃圾收集器了,而是使用了全新的G1垃圾收集器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/710630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++智能指针使用陷阱、shared_ptr实现

一 智能指针使用概述 1.使用场景 1.1 unique_ptr 1.1.1 概念 std::unique_ptr 是通过指针占有并管理另一对象,并在 unique_ptr 离开作用域时释放该对象的智能指针。 std::unique_ptr 常用于管理对象的生存期,包含: 通过正常退出和经由异…

SpringBoot 实现导出数据 - EasyExcel 导出数据

文章目录 1. EasyExcel 介绍2. 导出2.1 引入依赖2.2 构建测试实体类 3. 设置单元格大小 1. EasyExcel 介绍 EasyExcel 官网介绍 传统操作Excel大多都是利用 Apach POI 进行操作的,但是 POI 框架并不完善,使用过程非常繁琐且有较多的缺陷: 动态…

lesson11 Zigbee MAC地址通信

目录 Zigbee MAC地址通信 前言 查看MAC地址(含组网过程抓包分析) 方法1:通过dongle抓包查看MAC地址 方法2:仿真调试查看MAC 实验过程 实现步骤 实验效果 出错分析 最终现象 结果分析 Zigbee MAC地址通信 前言 1、Zig…

Python中类的变量,一个下划线与两个下划线的区别

形似 功能__xx这是私有变量, 只有内部可以访问,外部不可以访问。但是也不是一定不可以访问,只要以 _类名__xx样式就可以访问 。但最好不要这样做,养成良好编程习惯_x这是实例变量,可以访问,但是不要轻…

STM32MP157-正点原子第六章tf-a使用编译错误

原因:交叉编译工具链选择错误 亲测: gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz 和 gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz 可以成功编译 下载网址https://mirrors.tuna.tsinghua.edu.cn/armbian-relea…

全国各城市交通运输邮电业本地电话用户(1999-2020年)

本数据展示了全国各城市的本地电话用户数量。通过对这些数量的分析,可以了解全国各城市通信设施建设的发展情况、人口密度以及工业经济的发展程度等方面的信息。此数据不仅可供政府部门制定信息技术政策,还可以为企业投资提供重要参考。同时,…

Leetcode-每日一题【382.链表随机结点】

题目 给你一个单链表,随机选择链表的一个节点,并返回相应的节点值。每个节点被选中的概率一样 。 实现 Solution 类: Solution(ListNode head) 使用整数数组初始化对象。int getRandom() 从链表中随机选择一个节点并返回该节点的值。链表中所有节点被选中的概率相…

网络空间安全专业未来的发展前景以及薪资待遇如何?

不管是考虑未来报读专业的准大学生,还是初入职场的实习生,亦或是想要跳槽转岗的职场人,当我们开始选择一份工作时,本质上都在考虑以下三个问题: 这份工作的收入水平如何;这份工作有没有发展前景&#xff1…

基于卷积神经网络的目标分类案例

文章目录 一、卷积神经网络二、环境配置及数据集准备三、猫狗数据分类建模1、猫狗图像预处理2、猫狗分类的实例——基准模型3、基准模型的调整 一、卷积神经网络 卷积神经网络(Convolutional Neural Networks, CNN 是一类包含卷积计算且具有深度结构的前馈神经网络…

HashMap源码分析

文章目录 1、put方法流程2 、扩容机制3 、get方法 分析源码我们一般从三个方面入手&#xff1a; 常见属性&#xff08;成员变量&#xff09;构造方法关键方法 下面分析一下HashMap源码&#xff1a; 首先常见属性有&#xff1a; DEFAULT_INITIAL_CAPACITY 1 << 4; // a…

二叉树进阶——搜索二叉树

搜索二叉树 1. 概念2. 二叉搜索树的操作2.1 查找2.2 插入2.3 删除&#xff08;重点&#xff09; 3. 搜索二叉树的应用4. 搜索二叉树的性能分析 1. 概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&am…

《项目实战》构建前后端一体化项目查询CSDN博客Top100文章质量分

系列文章目录 构建前后端一体化项目查询CSDN博客Top100文章质量分 文章目录 系列文章目录前言1、搭建后端框架1.1、 创建RestFull风格接口1.2、创建获取数据服务1.2.1、在个人博客页&#xff0c;找到获取全部博文的路径&#xff08;页面-> network->找到加载博文的地址&…

C# ---委托机制 delegate 和 回调方法 callback

C# --- 委托机制 delegate 和 回调 callback 什么是委托机制委托机制的优点C# 中的Action 和 Func委托机制的主要用处 --- 回调 Callback 什么是委托机制 委托机制相当于C语言中的函数指针, 将一个方法的reference传入另外一个方法中 Example //创建一个方法 //创建一个委托 …

青少年机器人技术一级考试备考重点(二):基础结构与力的基础

随着机器人技术的飞速发展&#xff0c;越来越多的青少年开始关注并参与其中。青少年机器人技术考试作为一项评估学生机器人技术水平的重要考试&#xff0c;备受广大青少年和家长的关注。为了更好地备战青少年机器人技术一级考试&#xff0c;了解考试的学习要点和备考重点是非常…

设计师简历范文

设计师简历范文一&#xff1a; 姓名&#xff1a; 目前所在&#xff1a; 天河区 年  龄&#xff1a; 26 户口所在&#xff1a; 湖南 国  籍&#xff1a; 中国 婚姻状况&#xff1a; 未婚 民  族&#xff1a; 汉族 身  高&#xff1a; 170 cm 体  重&#xff1a; 65 kg…

大学期间,这些证书你考过了吗

目录 一、概览 1、英语方面 第二外语 2、专业资格证书 3、教师资格证 4、普通话证书 5、财务类证书 6、法律职业资格证 7、有备无患的证书 8、技能类证书-驾照 9、发表论文、专利证书、出专业书 10、竞赛类 11、其他 二、写在最后 一、概览 1、英语方面 第二外语 …

Spring AOP讲解及实例

Aop面向切面编程 文章目录 Aop面向切面编程什么是AOPAOP术语Spring AOP 的使用导入依赖编写切面类切面定义语法小细节输出日志成功 什么是AOP AOP&#xff1a;&#xff08;Aspect Oriented Programming&#xff09;面向切面编程&#xff0c;和OOP&#xff08;Object Oriented …

Nginx(6)nginx的缓存集成

缓存集成 Nginx缓存集成缓存的概念Nginx的web缓存服务 缓存设置的相关指令Nginx缓存设置案例 Nginx缓存的清除Nginx设置资源不缓存 Nginx缓存集成 缓存的概念 缓存就是数据交换的缓冲区(称作Cache)&#xff0c;当用户要获取数据的时候&#xff0c;会先从缓存中去查询获取数据…

前端Vue基本语法

尤雨溪 文章目录 前言MVVM框架认识Vue文本渲染指令 v-text属性绑定指令:title属性动态绑定class属性动态绑定style属性动态绑定 事件绑定 事件名条件渲染指令v-ifv-if和v-showv-else和v-else-if 循环遍历指令 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xf…

华为OD机试真题 Python 实现【获取最大软件版本号】【2023Q1 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、补充说明五、解题思路六、Python算法源码七、效果展示1、输入2、输出 一、题目描述 Maven版本号定义&#xff0c;<主版本>.<次版本><增量版本>-<里程碑版本> 举例3.1.4-beta 其中&#xff0c;主版本和次…