三、 GC算法
2016-07-14 00:37
204 查看
GarbageCollection 垃圾收集,GC的对象是堆空间和永久区
GC算法
– 引用计数法
– 标记清除
– 标记压缩
– 复制算法
问题:
引用和去引用伴随加法和减法,影响性能
很难处理循环引用
l 不适用于存活对象较多的场合如老年代
l 将原有的内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内存块中,之后,清除正在使用的内存块中的所有对象,交换两个内存的角色,完成垃圾回收
问题是:空间浪费 整合标记清理思想
GC算法
– 引用计数法
– 标记清除
– 标记压缩
– 复制算法
3.1、引用计算法
引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。问题:
引用和去引用伴随加法和减法,影响性能
很难处理循环引用
3.2、标记清除法
标记-清除算法是现代垃圾回收算法的思想基础。标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。一种可行的实现是,在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。3.3、标记-压缩
标记-压缩算法适合用于存活对象较多的场合,如老年代。它在标记-清除算法的基础上做了一些优化。和标记-清除算法一样,标记-压缩算法也首先需要从根节点开始,对所有可达对象做一次标记。但之后,它并不简单的清理未标记的对象,而是将所有的存活对象压缩到内存的一端。之后,清理边界外所有的空间。3.2、复制算法
l 与标记-清除算法相比,复制算法是一种相对高效的回收方法l 不适用于存活对象较多的场合如老年代
l 将原有的内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内存块中,之后,清除正在使用的内存块中的所有对象,交换两个内存的角色,完成垃圾回收
问题是:空间浪费 整合标记清理思想
相关文章推荐
- Centos7安装杀毒软件ClamAV
- unity中实现 幸运转轮
- 郭郭自学笔记(2):堆排序2.0
- 剑指offer系列-T24_2二叉搜索树的后序遍历序列
- 安装程序时出现2502 2503错误解决方法
- REDHAT6.5实现Nginx+Tomcat+Memcache负载均衡
- 两台主机网线直连
- 二、 JVM参数调试
- 水平垂直居中问题解法
- AndroidStudio使用SVN
- 一、 jvm运行机制
- hdu 1232 畅通工程并查集版
- Flume快速入门(五):File Channel之重播(replay)
- Memcached内存管理slabclass
- 【慢速学数据结构】集合(并查集)篇
- VS2013的 Browser Link 引起的问题
- C 语言 指针和数组的结合
- 正式开始博客之旅
- jenkins页面不刷新,设置tomcat缓存
- 2016阿里安全峰会:我一次思想排空的旅程