美文网首页
GC 算法的前世今生

GC 算法的前世今生

作者: DCMeng | 来源:发表于2019-11-21 16:45 被阅读0次

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Luomingkui1109/article/details/72821792

1.垃圾回收器(GC)算法的前世今生

1.1 Mark-Sweep算法:
Mark-Sweep算法,也称为:标记-清除法,这是最基本的垃圾回收器算法,过程如下:
Mark-Sweep分为:标记阶段和清除阶段
标记要回收的对象,清除回收被标记所占的空间
PS:一个是效率问题,标记和清除过程的效率都不高;另外一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致,当程序在以后的运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。


image

1.2 Copying算法(复制算法):
上面说了Mark-Sweep算法,有很大的问题,所以,算法不停的改进,产生了Copying算法,具体情况如下:
① 将内存分为大小相等的两块,每次只使用一块
② 将活着的对象复制到另一块上,使用的清除掉
PS:不容易产生内存碎片,但是内存会缩减到以前的一半,如果存活对象多,效率会很低,所以可以于新区的时候。


image
1.3 Mark-Compact算法(标记整理算法):
为了解决,空间浪费的问题,算法继续改进,Mark-Compact算法问世,具体情况如下:
标记阶段和Mark-Sweep一样
完成标记后,不直接清除回收对象,将对象移向一段
清理边界内存
ps:标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。
image

1.4 Generational Collection算法
分代收集算法,听名字就知道,因为我们根据存活的生命周期分为了:新生代,老年代和永久代,具体情况如下:
• 根据存活的生命周期将内存分为若干个区:新生代和老年代和永久代
• 新生代:每次都回收大量对象——>Copying复制法
• 老年代:每次都回收少量对象——>Mark-Compact法
• 永久代:存储class类,常量,方法描述:回收废弃常量和无用类
• 分代收集法:也就是Jvm的垃圾回收所使用的算法,这种算法,既提高了内存空间的使用,而且根据各代的特点,针对处理,减少了cpu的使用率,提高了性能。

相关文章

  • GC 算法的前世今生

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:...

  • Lua GC

    一、GC的原理及其算法设计 不同的语言,对GC算法的设计不同,常见的GC算法是引用计数和Mark-Sweep算法,...

  • chapter-4 GC算法与种类

    GC 算法与种类 ■ GC的概念■ GC算法• 引用计数法• 标记清除• 标记压缩• 复制算法■可触及性■ Sto...

  • GC算法基础

    英文原文:GC Algorithms: Basics译者:有孚译文地址:GC算法基础 在深入GC算法的实现细节之前...

  • java性能优化

    压测工具 基准性能数据 方面 代码算法 JVM gc算法 gc收集器

  • 将军在上之男昭女惜重生三世千年孽缘

    前世!今生!来世再续! 前世欠谁!今生还!来世再续前缘! 前世因!今生续!来世果!

  • Android内存优化

    GC算法 当内存不足时,系统就会触发GC,GC采用垃圾标记算法为跟搜索算法 从图中可以看书obj4是科大的对象,标...

  • 人死,并非如灯灭……

    “今生,是前世的“来生”,是来生的“前世”。在今生中,我们能见到自己的前世与来生。回溯前世,是为了改善今生;回到今...

  • 《垃圾回收的算法与实现》第2章GC标记-清除算法

    《垃圾回收的算法与实现》第2章GC标记-清除算法 垃圾回收系列连载: 第 1 章 学习GC之前 第 2 章 GC标...

  • HotSpot note (part-3)

    part 3 DefNew的GC属于Minor GC,使用copying算法进行垃圾收集,是Serial GC(-...

网友评论

      本文标题:GC 算法的前世今生

      本文链接:https://www.haomeiwen.com/subject/yxmtwctx.html