进阶学习(4.3) JVM 垃圾回收算法
1, 引用计数法
- Object a = new Object(), 引用计数为0
- Object b = a; 计数 +1
- a = null 计数为0, 对象将被回收
- b 也是垃圾对象
引用计数法有很大的缺点, 无法解决循环引用, a = c ; b = a; c = b;
java 中的对象引用是非常频繁的, 会操作频繁的计数, 消耗性能
2, 标记清除法
- 必须先知道GC Root 是什么, 可以参考我写的另一篇博客 https://blog.csdn.net/weixin_42209307/article/details/108457077
- JVM 从堆中的 root 对象开始寻找, Root 是有很多个的, 将与 root 对象关联的对象全部进行标记, 然后JVM 会将没有被标记的对象抹除
- 抹除的时候, 堆中就会出现很多空白的内存, 断断续续的, 内存不连续, 这个是标记清除法的缺点
- 而且在标记的时候, 程序会中止进行, 全部处于wait 状态, 这是为了防止新创建的对象, 关联对象没有标记, 而被虚拟机清除, 这个过程叫, "stop the world", 我们简称STW 就好了, 所有垃圾回收机制在清除的时候都会产生STW
3, 标记压缩算法
- 就是为了解决标记算法内存不连续的问题
- 为什么向前排, 方便创建对象的时候使用指针碰撞快速找到可分配内存
4, 复制算法
- 复制算法开辟了两块空间, Java er 必须要知道的就是, 新生代的幸存区就是采用的复制算法, 从 from 到 to
- 还是要先标记, 再 A 空间操作标记, 然后将未标记的对象留在A, 被标记的对象移动到B, 再清除 A 整块空间
- 这里了解一下JVM的幸存区, 幸存区永远都是在操作A区, GC操作完以后, 移形换位了, B 变成了 A
5, 分代算法
- 分代算法非算法, 也可以叫它为组合算法, 针对, 幸存区 和 老年代, 进行上面不同的算法,
- 幸存区是复制算法, 老年代是标记算法
6, 分区算法, jdk 1.7 以后, G1 GC 使用分区算法
- 分区算法, 网上说的都是, 上面减少STW时间, 至于为什么减少, 只字不提, 我TM,
- 分区算法是为了适配G1 回收器的, 目的旨在, 并发的进行垃圾回收, 将STW产生下发到某一个区块
- 垃圾为什么要控制堆不能产生新对象, 因为新对象可能会被未标记, 导致变成垃圾
- 而分区算法就好像, 以前的堆是单线程, 现在变成多线程了, 以前我需要控制整个堆不产生新对象
- 而现在我在GC的时候, 只需要控制某个小块空间不产生新对对象就好了
进阶学习(4.3) JVM 垃圾回收算法相关推荐
- java jvm垃圾回收算法_深入理解JVM虚拟机2:JVM垃圾回收基本原理和算法
本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 喜欢的话麻烦点下Star哈 文章将同步到我的个人博客: www.how ...
- JVM 垃圾回收算法 -可达性分析算法!!!高频面试!!!
前言:学习JVM,那么不可避免的要去了解JVM相关的垃圾回收算法,本文只是讲了讲了可达性分析算法,至于标记-清除.标记-复制,标记-整理,分代收集等等算法,会在近两天的文章中陆续更新出来. 很喜欢一句 ...
- JVM垃圾回收算法与原理详解
垃圾回收 参考文档 GC参考手册-Java版 理解Java的强引用.软引用.弱引用和虚引用 JVM系列(五) - JVM垃圾回收算法 如何判断对象可以回收 引用计数法 参考文章 Java JVM的引用 ...
- jvm垃圾回收算法和垃圾回收器
垃圾回收算法 jvm垃圾回收算法包括复制算法.标记清楚算法和标记整理算法,它们都基于分代收集理论.所谓分代收集理论,可以理解为jvm根据对象的生命年龄将他们分在不同的内存模块,也就是熟知的新生代和老年 ...
- jvm垃圾回收算法详解
前言 相比C语言,JVM虚拟机一个优势体现在对对象的垃圾回收上,JVM有一套完整的垃圾回收算法,可以对程序运行时产生的垃圾对象进行及时的回收,以便释放JVM相应区域的内存空间,确保程序稳定高效的运行, ...
- JVM垃圾回收算法及垃圾回收器
目录 一.垃圾回收GC (Garbage Collection) 1.1 垃圾回收介绍: 1.2 如何判断对象是否存活(被使用) 1.2.1 引用计数算法(已经废弃) 1.2.2 可达性分析 二.垃 ...
- JVM 垃圾回收算法与ART CC回收器实现概述
前言 在作者的上一篇文章<Android R常见GC类型与问题案例>中,对Demo应用的Heap堆结构与Space类型及相对应内存分配算法做了简要的探究,同时对Android R机器运行中 ...
- 记录JVM垃圾回收算法
垃圾回收算法可以分为三类,都基于标记-清除(复制)算法: Serial算法(单线程) 并行算法 并发算法 JVM会根据机器的硬件配置对每个内存代选择适合的回收算法,比如,如果机器多于1个核,会对年轻代 ...
- JVM垃圾回收算法 总结及汇总
先看一眼JVM虚拟机运行时的内存模型: 1.方法区 Perm(永久代.非堆) 2.虚拟机栈 3.本地方法栈 (Native方法) 4.堆 5.程序计数器 1 首先的问题是:jvm如何知道那些对象需要回 ...
最新文章
- 二维指针动态分配内存连续问题分析
- RS485 串口调试如何操作
- LeetCode 271. 字符串的编码与解码(4位16进制字符+字符串)
- java私有表示标识_java里面的标识符、关键字和类型
- 以太坊2.0抵押地址新增13.47万ETH
- 读-深入理解Java虚拟机(1-2章)随笔
- [f]class获取元素函数
- 数学建模国赛 2020B-穿越沙漠 第一关 Lingo 和 C语言 动态规划求解
- 使用Word文档生成.prn文件
- win10 安装redis 解压版
- IDEA代码和页面前进后退快捷键
- Intelligent Reflecting Surface Assisted Secrecy Communication via Joint Beamforming and Jamming
- IT去中心化背后的低代码平台
- 「python自学建议贴」Python学习路线+视频教程完整版
- Win10右键菜单没有新建选项怎么解决?
- Drill系列(1):Dremel的原理
- 力扣(104.101)补9.7
- PHP实现生成小程序二维码带参数进入指定页面、小程序URL scheme实现携带数据跳转小程序
- vue 自定义验证规则rule只能为数字
- python pandas excel 排序_Python pandas对excel的操作实现示例
热门文章
- ffmpeg端口被占用
- ubuntu 关闭显示,关闭显卡,命令与图形切换
- 21. 将报警信息实时发送至邮箱
- ajax技术运用案例,第12篇:Ajax技术与项目案例
- html 调用ios手机相机 demo,H5网页调用Android和iOS手机相机功能
- 简述原型模型的特点_软件工程简答题答案 第五版
- C语言字符数组与字符串的使用及加结束符‘\0‘的问题
- Selenium3自动化测试——3. 控制浏览器
- python遍历任意层次字典_Python递归中 return 代码陷阱
- 双鉴探测器是哪两种探测方式结合_火灾探测器、手动火灾探测器和自动火灾报警分类...