随笔分类 -  JVM

《垃圾回收的算法与实现》——Python垃圾回收
摘要:Python垃圾回收 python采用引用计数法进行垃圾回收 Python内存分配 python在分配内存空间时,在malloc之上堆放了3个独立的分层。 python内存分配时主要由arena、pool和block三个构成。 第0层 该层指glibc的malloc()这样的分配器,是对OS申请内存 阅读全文
posted @ 2017-04-04 01:22 suolu 阅读(499) 评论(0) 推荐(0) 编辑
《垃圾回收的算法与实现》——增量式垃圾回收与RC Immix算法
摘要:增量式垃圾回收 为了控制最大暂停时间,通过逐渐推进垃圾回收即垃圾回收与mutator交替执行。 三色标记算法 以标记 清除算法为例使用三色标记算法。 利用降低吞吐量来缩短最大停顿时间。 基础 将GC中对象分成三种颜色: 白色:还未搜索过 灰色:正在搜索 黑色:搜索完成 增量式的GC标记 清除算法分成 阅读全文
posted @ 2017-04-03 00:33 suolu 阅读(1380) 评论(0) 推荐(0) 编辑
《垃圾回收的算法与实现》——分代垃圾回收
摘要:分代垃圾回收 理论支持:经验得出——"大部分的对象在生成后马上就变成了垃圾,很少有对象能活得很久"。 分代垃圾回收将刚生成的对象称为新生代,达到一定年龄(进过一次GC即一岁)的对象称为老年代,不同代的对象使用不同回收算法。 新生代对象执行GC称为新生代GC(minor GC)。 新生代对象存活一定次 阅读全文
posted @ 2017-04-02 23:00 suolu 阅读(1757) 评论(0) 推荐(0) 编辑
《垃圾回收的算法与实现》——保守式GC
摘要:保守式GC 保守式GC指“不能识别指针和非指针的GC”。 1. 不明确的根,寄存器、调用栈。全局变量空间等属于GC root,这些GC均不能识别出是指针还是非指针。 2. 指针的识别,在不明确的根的条件下可以已某种程度的精度来识别指针。 1. 是否被正确对其 2. 是否指向堆 3. 是否指向对象的头 阅读全文
posted @ 2017-04-02 21:17 suolu 阅读(2799) 评论(0) 推荐(0) 编辑
《垃圾回收的算法与实现》——GC标记-压缩算法
摘要:基本算法 Mark Compact与Mark Sweep的第一阶段均为标记活跃对象,第二阶段则不同,压缩算法则是将活跃对象逻辑上移到一起。 Lisp2算法 对象头中增加forwarding指针,其用法与复制算法一样。 Lisp2的标记阶段与其他算法一样,其压缩算法则包括以下三个步骤: 设定forwa 阅读全文
posted @ 2017-04-02 00:17 suolu 阅读(1354) 评论(0) 推荐(0) 编辑
《垃圾回收的算法与实现》——GC复制算法
摘要:基本概念 GC复制算法将堆分成From和To两个内存块,当From被占满时GC将From中的存活对象复制到To中,同时将From和To交换。 通过递归遍历GC root(即采用深度优先)复制存活对象,对于已经复制过的标记其COPIED字段。 复制过的对象将在From的对象的forwarding记录T 阅读全文
posted @ 2017-04-01 00:30 suolu 阅读(4478) 评论(0) 推荐(1) 编辑
《垃圾回收的算法与实现》——引用计数法
摘要:基本概念 在对象中引入计数器(无符号整数),用于记录有多少对象引用了该对象。 通过增减计数器实现对内存的管理。 分配对象时将计数器置1。 更新引用时先对新指定的对象进行计数器加,而后才对旧对象进行减。 在对计数器做减法时,判断其计数器是否等于0,等于0 表示为垃圾,即可进行回收。 在更新引用时就进行 阅读全文
posted @ 2017-03-31 01:18 suolu 阅读(2243) 评论(0) 推荐(0) 编辑
《垃圾回收的算法与实现》——GC标记-清除算法
摘要:基本算法 标记 清除算法由 ==标记阶段== 和 ==清除阶段== 构成。 标记即将所有活动的对象打上标记。 清除即将那些没有标记的对象进行回收。 标记与清除 遍历GC root引用,递归标记(设置对象头中的标志位)对象。 标记时如果标志位表示已经标记过则可以跳过。 遍历对象有深度优先与广度优先两种 阅读全文
posted @ 2017-03-30 23:34 suolu 阅读(2962) 评论(0) 推荐(1) 编辑