![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
GC
烟草的香味.
这个作者很懒,什么都没留下…
展开
-
GC算法-增量式垃圾回收
概述 增量式垃圾回收也并不是一个新的回收算法, 而是结合之前算法的一种新的思路. 之前说的各种垃圾回收, 都需要暂停程序, 执行GC, 这就导致在GC执行期间, 程序得不到执行. 因此出现了增量式垃圾回收, 它并不会等GC执行完, 才将控制权交回程序, 而是一步一步执行, 跑一点, 再跑一点, 逐步完成垃圾回收, 在程序运行中穿插进行. 极大地降低了GC的最大暂停时间. 实现 增量式垃圾回收只是...原创 2020-04-12 15:04:13 · 350 阅读 · 1 评论 -
GC算法-分代垃圾回收
概述 分代垃圾回收并不是一个新的算法, 而是将之前的回收算法结合利用, 分场景使用. 简单来说, 分代垃圾回收的思路, 就是给每个对象都非配一个年龄, 年龄越大的, 获得越久, 被回收的概率就越小. 经验表明, 大部分对象在生成后马上就Ian成了垃圾. 也就是说, 年轻人要多运动, 没事的时候多看看, 长回收. 老年人好静, 一般不去惊扰他老人家. 分代垃圾回收就是利用这个现象, 将堆分为了新生...原创 2020-04-11 15:46:44 · 136 阅读 · 0 评论 -
GC算法-标记压缩算法
概述 还记得标记清除和复制算法的问题么? 堆使用效率低和碎片化问题. 那么有没有能够里哟功能整个堆, 有没有内存碎片化问题的算法呢? 这就是标记压缩算法了. 简单来说, 标记压缩算法就是将堆中的所有活动对象整体向左移, 将对象间的空隙消除. 在GC执行前的内存: GC执行后的内存: 恩, 就是这么个意思. 实现 如何实现上面的操作呢? 首先, 要将所有活动对象标记出来....原创 2020-04-06 16:13:38 · 235 阅读 · 0 评论 -
GC算法-复制算法
概述 复制算法就是将内存空间二等分, 每次只使用其中一块. 当执行GC时, 讲A部分的所有活动对象集体移到B中, 就可以讲A全部释放. 画个图就是: 在执行GC前, 内存长这样: 当执行GC后, 内存就变成这样了: 还记得标记清除算法的问题是什么吗? 内存碎片化严重. 现在好了, 碎片化问题解决了, 每次GC执行后, 内存空间都是连续的啦. 实现 想一想GC执行的步骤是什么? 很简单啊...原创 2020-04-06 14:46:09 · 332 阅读 · 0 评论 -
GC算法-引用计数法
GC算法-引用计数法 概述 引用计数法又是什么鬼呢? 顾名思义, 对对象的引用进行计数. 通过记录每个对象被引用的次数, 来确定这个对象是否可以被回收. 实现 首先, 对对象的引用数量进行管理, 什么时候会更新呢? 创建对象: 新建一个对象(对这个新的对象引用数量+1) 更新指针: 将一个指向A对象的指针重新指向B对象(将A对象引用数量-1, B对象引用数量+1) 这次就不上代码了, 简单介绍...原创 2020-04-05 18:37:17 · 567 阅读 · 0 评论 -
GC算法-标记清除算法
概述 标记清除算法, 描述起来很简单, 从名字上就能看出, 分为两个阶段: 标记阶段: 遍历所有对象, 将活动对象都打上标记 清除阶段: 遍历堆, 将没有标记的对象释放掉. 介绍完毕, 本文结束. 开玩笑, 确实看上去很简单啦. 那就具体思考一下实现吧. 实现 介绍写的很清楚了, 实现也是两个阶段呗, 先打tag, 后清除. 标记 寻找所有的活动对象, 要从一个起点开始, 根集合(包括栈、常量...原创 2020-04-04 15:48:34 · 276 阅读 · 0 评论 -
GC算法的评价标准
GC是什么 GC就是垃圾回收, 哎, 现在Java如日中天, JVM都又算了解吧. 其中的垃圾回收还经常在面试中问道(虽然我忘完了). 当然, 垃圾回收不只是JVM, Python、等等高级语言都用到了. 简单说, GC完成的任务就两件事: 找到内存中已经无用的垃圾 将垃圾回收, 以便于之后可以再次利用 之前用C语言的时候, 使用 malloc申请堆上的内存, 是需要通过free函数进行释放的...原创 2020-03-29 16:43:59 · 180 阅读 · 0 评论