随笔分类 - GC
GC算法
摘要:概述 也并不是一个新的回收算法, 而是结合之前算法的一种新的思路. 之前说的各种垃圾回收, 都需要暂停程序, 执行GC, 这就导致在GC执行期间, 程序得不到执行. 因此出现了 , 它并不会等GC执行完, 才将控制权交回程序, 而是一步一步执行, 跑一点, 再跑一点, 逐步完成垃圾回收, 在程序运行
阅读全文
摘要:概述 并不是一个新的算法, 而是将之前的回收算法结合利用, 分场景使用. 简单来说, 的思路, 就是给每个对象都分配一个年龄, 年龄越大的, 活的越久, 被回收的概率就越小. 经验表明, 大部分对象在生成后马上就成了垃圾. 也就是说, 年轻人要多运动, 没事的时候多看看, 常回收. 老年人好静, 一
阅读全文
摘要:概述 还记得标记清除和复制算法的问题么? 堆使用效率低和碎片化问题. 那么有没有能够利用整个堆, 有没有内存碎片化问题的算法呢? 这就是标记压缩算法了. 简单来说, 标记压缩算法就是将堆中的所有活动对象整体向左移, 将对象间的空隙消除. 在GC执行前的内存: GC执行后的内存: 恩, 就是这么个意思
阅读全文
摘要:概述 复制算法就是将内存空间二等分, 每次只使用其中一块. 当执行GC时, 讲A部分的所有活动对象集体移到B中, 就可以讲A全部释放. 画个图就是: 在执行GC前, 内存长这样: 当执行GC后, 内存就变成这样了: 还记得 的问题是什么吗? 内存碎片化严重. 现在好了, 碎片化问题解决了,
阅读全文
摘要:概述 引用计数法又是什么鬼呢? 顾名思义, 对对象的引用进行计数. 通过记录每个对象被引用的次数, 来确定这个对象是否可以被回收. 实现 首先, 对对象的引用数量进行管理, 什么时候会更新呢? 1. 创建对象: 新建一个对象(对这个新的对象引用数量+1) 2. 更新指针: 将一个指向A对象的指针重新
阅读全文
摘要:概述 标记清除算法, 描述起来很简单, 从名字上就能看出, 分为两个阶段: 1. 标记阶段: 遍历所有对象, 将活动对象都打上标记 2. 清除阶段: 遍历堆, 将没有标记的对象释放掉. 介绍完毕, 本文结束. 开玩笑, 确实看上去很简单啦. 那就具体思考一下实现吧. 实现 介绍写的很清楚了, 实现也
阅读全文
摘要:GC是什么 GC就是垃圾回收, 哎, 现在Java如日中天, JVM都有些了解吧. 其中的垃圾回收还经常在面试中问道(虽然我忘完了). 当然, 垃圾回收不只是JVM, Python等高级语言都用到了. 简单说, GC完成的任务就两件事: 1. 找到内存中已经无用的垃圾 2. 将垃圾回收, 以便于之后
阅读全文
