目录

参考文章

四种GC算法

分代收集算法(理论)

标记清除算法

标记整理算法

标记复制算法

三种算法的优缺点


参考文章

JVM的4种垃圾回收算法、垃圾回收机制与总结_我是guyue,guyue就是我O(∩_∩)O-CSDN博客_垃圾回收的四种算法Java堆内存又溢出了!教你一招必杀技【附源码】_李振良_阿良_51CTO博客JVM分代收集理论与三种标记算法_u011277123的博客-CSDN博客_分代理论JVM的4种垃圾回收算法、垃圾回收机制与总结_我是guyue,guyue就是我O(∩_∩)O-CSDN博客_垃圾回收的四种算法

四种GC算法

四种算法为:

        标记清除法

        复制算法

        标记整理法(标记压缩算法)

        分代算法

其中分代算法和其他三种算法略有不同,个人感觉前三种是真正对内存进行垃圾回收,而分代算法更算是一种思想,把堆分为三部分,然后利用三种算法分别回收

从内存效率来看(时间复杂度):复制算法>标记清除算法>标记整理算法

从内存整齐度来看                      :复制算法=标记整理算法>标记清除算法

从内存利用率来看                      :标记整理算法=标记清除算法>复制算法

从使用位置来看                          :复制算法用于新生代中,标记清除算法和标记整理算法使用于                                                           老年代中

具体这么选择的原因可以看下文对于算法不同点分析中可以看出

分代收集算法(理论)

将内存划分为新生代、老年代和永久代

标记清除算法

分为两个阶段:

标记阶段:标记出可以回收的对象

清除阶段:回收被标记的对象所占用的空间

标记整理算法

建立在标记整理算法的基础上,在标记可回收对象后将所有存货的对象移动到内存的一段,使他们紧凑的排列在一起,然后对其他的内存进行回收

本质是:移动+删除(与后面复制算法进行区分)

标记复制算法

是幸存区所用的算法

把内存划分为两个相等的区域,每次只使用一个区域,另一个区域为空。垃圾回收是,便利当前使用的区域,把存活的对象复制到为空的那一部分区域,然后对非空(要清理的这部分区域)的数据全部进行清理,这样原先非空的区域就变成了空的区域,原先空的区域就变成了非空的区域

在幸存区中,会把所有的数据从From区移动到To区,然后将伊甸园区中未被回收的数据放在To区,然后清理所有From区的数据,这样原先的To区就变成了From区,原先的From区就变成了To区

本质是:复制+删除(与前面标记整理算法进行区分)

原理如图

在幸存区的操作

移动完成后From和To交换

三种算法的优缺点

参考这篇文章

标记复制算法一般会比其它两种算法快十倍左右。当继续存活的对象比较少时,应当使用标记复制算法。在新生代中,根据经验值,98%的对象在第一次GC时就会被回收,所以适合使用标记复制算法。老年代中,对象已经存活了很长时间,这一轮GC中被回收的概率较低,此时,为了避免不断将对象进行复制的开销,应当使用标记清除或标记整理算法。

【JVM】四种GC算法(分代收集+三种标记算法)相关推荐

  1. JVM重点简述—分代收集理论与垃圾收集算法

    一.分代收集理论 设计原则:将java堆划分为不同区域,将回收对象依据年龄分配到不同区域存储.由此产生新生代和老年代的概念,新生代每次手机都会有大批对象死去,存活的少量对象逐步晋升为老年代. 三条假说 ...

  2. 67.Java垃圾收集机制\对象引用\垃圾对象的判定\垃圾收集算法\标记—清除算法\标记—整理算法\分代收集\垃圾收集器\性能调优

    67.Java垃圾收集机制 67.1.对象引用 67.2.垃圾对象的判定 67.3.垃圾收集算法 67.3.1.标记-清除算法 67.3.2.标记-整理算法 67.3.3.分代收集 67.4.垃圾收集 ...

  3. 【Android 内存优化】垃圾回收算法 ( 分代收集算法 | Serial 收集器 | ParNew 收集器 | Parallel Scavenge 收集器 | CMS 并发标记清除收集器 )

    文章目录 一. 分代收集算法 二. 垃圾回收器 / 收集器 ( GC ) 三. 串行收集器 ( Serial ) 四. ParNew 收集器 五. Parallel Scavenge 收集器 六. C ...

  4. 欧尼酱讲JVM(22)——分代收集算法

    目录 分代收集算法 HotSpot中的分代收集 年轻代 老年代 没有一种最好的算法吗?没有,没有最好只有最适合.具体问题具体分析! 上一篇文章<欧尼酱讲JVM(21)--垃圾回收相关算法> ...

  5. 【Android 内存优化】内存抖动 ( 垃圾回收算法总结 | 分代收集算法补充 | 内存抖动排查 | 内存抖动操作 | 集合选择 )

    文章目录 一. 垃圾回收算法总结 二. 分代收集算法补充 三. 查看 Java 虚拟机 四. 获取 Android 应用可使用最大内存 五. 内存抖动标志 六. 排查内存抖动 七. 常见的造成内存抖动 ...

  6. GC算法 (标记清除、复制、标记整理、 分代收集) 、 新生代 老年代

    一.标记-清除算法(Mark-Sweep)   1标记阶段:首先通过根节点,标记所有从根节点开始的可达对象.未被标记的对象就是未被引用的垃圾对象 2清除阶段:清除所有未被标记的对象. 不足:1效率问题 ...

  7. 七种垃圾收集器和垃圾回收、分代收集、GCROOTS相关概念、GC如何判断一个对象可以被回收

    文章目录 垃圾收集器概述 垃圾回收算法 1)标记-清除算法(Mark-Sweep)(DVM 使用的算法) 2)复制算法(Copying) 3)标记-整理算法(Mark-Compact) 4)分代收集( ...

  8. 26 Java GC算法 垃圾收集器、标记 -清除算法、复制算法、标记-压缩算法、分代收集算法

    26.Java GC算法 垃圾收集器 1.1.1标记 -清除算法 1.1.2复制算法 1.1.3标记-压缩算法 1.1.4分代收集算法 26.Java GC算法 垃圾收集器 概述 垃圾收集 Garba ...

  9. JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法)

    转载自   JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法) 引言 何为终极算法? 其实就是现在的JVM采用的算法,并非真正的终极.说不定若干年以后,还会有新的终极算法, ...

最新文章

  1. SAP WM Movement Type 里的‘Ref.Stor.Type Search’字段用法初探
  2. python单例_Python单例模式
  3. android mvvm框架搭建_轻松搭建基于JetPack组件的MVVM框架
  4. win10搜索框没反应怎么修复
  5. php cookie赋值使用
  6. 深度学习——最优化的学习笔记
  7. NLP和CV的双子星,注入Mask的预训练模型BERT和MAE
  8. 免费且高质量的知识有的是,你只是不知道怎么找到它们!
  9. Atitti html5 h5 新特性attilax总结
  10. 饥荒联机版Mod开发——制作栏(九)
  11. 谈谈免费的仓库管理软件
  12. 美电信运营商推云计算业务
  13. 异数OS 星星之火(一)-- 异数OS-织梦师云 用户使用手册
  14. 苹果手机越狱软件_俄罗斯要求 iPhone 预装本国软件,苹果称等同于越狱无法接受...
  15. 分布式:分布式系统设计策略。
  16. 东北大学软件项目管理与过程改进复习提纲(2020)——第七章《项目成本管理》
  17. 爱情还能找人托管?| 搞笑囧图
  18. 3.会计等式与复式记账
  19. 如何在vue项目中使用Highmaps(vue+Highmaps)
  20. 人工智能应届毕业生月薪20k,他们是如何做到的?

热门文章

  1. 如何提高淘宝自然搜索流量?
  2. 学生用计算机的复位键,电脑复位键在什么位置
  3. flex 布局 space-around且最后一排靠左
  4. 关于vue页面如何反编译打包之后的.js.map 的文件
  5. IOS越狱环境用触摸触动LUA获取当前账号sec_uid
  6. 黑洞Blackhole :在Mac上控制苹果和安卓手机
  7. root开放远程链接,允许root远程登录
  8. php银行卡号自动识别银行,PHP实现根据银行卡号判断银行_PHP
  9. ubuntu测试视频采集卡_如何对您的视频卡进行基准测试(并可以与他人进行比较)...
  10. 关于ATIS以及基于注意力机制的递归神经网络模型 的学习记录