码迷,mamicode.com
首页 > 编程语言 > 详细

垃圾回收的概念与算法

时间:2017-05-13 18:58:14      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:碎片   整合   弱引用   from   串行   循环引用   对象回收   复制   清空   

GC中的垃圾,是指的是在内存中不在不再被使用的对象。

常见的垃圾回收算法

1.引用计数算法(无法回收循环引用的对象)

2.标记清除算法
分为标记阶段和清除阶段(会产生内存的空间碎片)

3.复制算法(缺点是将系统内存折半,高效性是建立在存活对象少,垃圾对象多的前提下的)

在java新生代串行垃圾回收器中,使用了复制算法的思想,新生代分为eden,from,to三个部分。from,to空间成为survivor空间,用于存放未被回收的对象。

其中:新生代指得是存放年轻对象的空间。

老年代指的是存放垃圾回收存活的对象。

在新生代中的垃圾回收中,eden区存活的对象会放在to中,正在使用from中的年轻对象也会被复制到to中,此时eden区与from区可以直接清空。

4.标记压缩法(高效性是建立在大多数的对象都是存活的)

用于老年代中的垃圾回收:

在标记清除算法中做了优化:从根节点开始,对所有可达对象做了标记。然后将所有的可达对象都压缩到内存的另一边,之后清理边界外的所有空间。

5.分代算法:

就是将复制算法与标记压缩法整合到一起。

6.分区算法:

将整个内存的对空间划分为连续的不同的小空间,每个小空间都单独的使用,独立的回收。由于对空间越大,一次GC所花费的时间越长,所以会减少GC的时间。

对象回收的情况

java提供了四个类型的引用:强引用,软引用,弱引用,虚引用。

强引用所指的对象在任何时候都不会被GC回收。

2.GC未必会回收软引用的对象吗,但是当内存资源紧张时,软引用的对象会被回收。

3.在GC中还要发现弱引用就会被回收。

4.一个虚引用随时随地都会被回收。

新生代与老年代GC的区别:

新生代GC比较频繁,但是持续的时间较短。

老年代GC发生次数少,但是持续的时间比较长。

垃圾回收的概念与算法

标签:碎片   整合   弱引用   from   串行   循环引用   对象回收   复制   清空   

原文地址:http://www.cnblogs.com/caobojia/p/6849834.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!