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 垃圾回收算法相关推荐

  1. java jvm垃圾回收算法_深入理解JVM虚拟机2:JVM垃圾回收基本原理和算法

    本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 喜欢的话麻烦点下Star哈 文章将同步到我的个人博客: www.how ...

  2. JVM 垃圾回收算法 -可达性分析算法!!!高频面试!!!

    前言:学习JVM,那么不可避免的要去了解JVM相关的垃圾回收算法,本文只是讲了讲了可达性分析算法,至于标记-清除.标记-复制,标记-整理,分代收集等等算法,会在近两天的文章中陆续更新出来. 很喜欢一句 ...

  3. JVM垃圾回收算法与原理详解

    垃圾回收 参考文档 GC参考手册-Java版 理解Java的强引用.软引用.弱引用和虚引用 JVM系列(五) - JVM垃圾回收算法 如何判断对象可以回收 引用计数法 参考文章 Java JVM的引用 ...

  4. jvm垃圾回收算法和垃圾回收器

    垃圾回收算法 jvm垃圾回收算法包括复制算法.标记清楚算法和标记整理算法,它们都基于分代收集理论.所谓分代收集理论,可以理解为jvm根据对象的生命年龄将他们分在不同的内存模块,也就是熟知的新生代和老年 ...

  5. jvm垃圾回收算法详解

    前言 相比C语言,JVM虚拟机一个优势体现在对对象的垃圾回收上,JVM有一套完整的垃圾回收算法,可以对程序运行时产生的垃圾对象进行及时的回收,以便释放JVM相应区域的内存空间,确保程序稳定高效的运行, ...

  6. JVM垃圾回收算法及垃圾回收器

    目录 一.垃圾回收GC (Garbage Collection) 1.1 垃圾回收介绍: 1.2  如何判断对象是否存活(被使用) 1.2.1 引用计数算法(已经废弃) 1.2.2 可达性分析 二.垃 ...

  7. JVM 垃圾回收算法与ART CC回收器实现概述

    前言 在作者的上一篇文章<Android R常见GC类型与问题案例>中,对Demo应用的Heap堆结构与Space类型及相对应内存分配算法做了简要的探究,同时对Android R机器运行中 ...

  8. 记录JVM垃圾回收算法

    垃圾回收算法可以分为三类,都基于标记-清除(复制)算法: Serial算法(单线程) 并行算法 并发算法 JVM会根据机器的硬件配置对每个内存代选择适合的回收算法,比如,如果机器多于1个核,会对年轻代 ...

  9. JVM垃圾回收算法 总结及汇总

    先看一眼JVM虚拟机运行时的内存模型: 1.方法区 Perm(永久代.非堆) 2.虚拟机栈 3.本地方法栈 (Native方法) 4.堆 5.程序计数器 1 首先的问题是:jvm如何知道那些对象需要回 ...

最新文章

  1. 二维指针动态分配内存连续问题分析
  2. RS485 串口调试如何操作
  3. LeetCode 271. 字符串的编码与解码(4位16进制字符+字符串)
  4. java私有表示标识_java里面的标识符、关键字和类型
  5. 以太坊2.0抵押地址新增13.47万ETH
  6. 读-深入理解Java虚拟机(1-2章)随笔
  7. [f]class获取元素函数
  8. 数学建模国赛 2020B-穿越沙漠 第一关 Lingo 和 C语言 动态规划求解
  9. 使用Word文档生成.prn文件
  10. win10 安装redis 解压版
  11. IDEA代码和页面前进后退快捷键
  12. Intelligent Reflecting Surface Assisted Secrecy Communication via Joint Beamforming and Jamming
  13. IT去中心化背后的低代码平台
  14. 「python自学建议贴」Python学习路线+视频教程完整版
  15. Win10右键菜单没有新建选项怎么解决?
  16. Drill系列(1):Dremel的原理
  17. 力扣(104.101)补9.7
  18. PHP实现生成小程序二维码带参数进入指定页面、小程序URL scheme实现携带数据跳转小程序
  19. vue 自定义验证规则rule只能为数字
  20. python pandas excel 排序_Python pandas对excel的操作实现示例

热门文章

  1. ffmpeg端口被占用
  2. ubuntu 关闭显示,关闭显卡,命令与图形切换
  3. 21. 将报警信息实时发送至邮箱
  4. ajax技术运用案例,第12篇:Ajax技术与项目案例
  5. html 调用ios手机相机 demo,H5网页调用Android和iOS手机相机功能
  6. 简述原型模型的特点_软件工程简答题答案 第五版
  7. C语言字符数组与字符串的使用及加结束符‘\0‘的问题
  8. Selenium3自动化测试——3. 控制浏览器
  9. python遍历任意层次字典_Python递归中 return 代码陷阱
  10. 双鉴探测器是哪两种探测方式结合_火灾探测器、手动火灾探测器和自动火灾报警分类...