标签:缺点 line 实例 计数 先来 复制算法 script markdown 其他
ps:文中的图片都来自网络。部分图片来源
作为一种高级语言,比起c和c++来,很进步的一点就是垃圾回收机制。这省去来了我们很多的工作,不过,我们仍然需要了解垃圾回收,这对我们的成长很有帮助。
引用计数法在很多高级语言都有,如python,java也不例外。对象内部维护有一个被其他对象引用的引用计数,当这个引用计数为0的时候,表示对象可以被回收。
引用计数法存在一个问题,就是循环引用,加入a引用b,b同时也引用a,那么就存在ab的引用计数都不为0的情况。
ps:图片来自网络
从图中我们可以很明显的看出,一个对象的根节点,不是gc root的话,就可以被回收。
java中有四种引用类型,默认是强引用类型:(下面都是说引用还在的情况下)
主要回收两部分内容:废弃常亮和无用的类
首先标记需要回收的对象,然后清除需要回收的对象。
缺点:
将内存分为两块,每次都使用其中一块,当这一块用完了,就将存活的对象复制到另一块,然后清除可以被回收的对象。
先标记可以被回收的对象,然后,让存活的对象向一端移动,最后直接清理掉另一端的内存。
将内存根据生命周期分为几种,一般为新生代和老生代,然后根据特性,选择不同的回收算法。
先来两个GC的概念:
新生代GC Minor GC
指发生在新生代的垃圾收集动作,因为java对象大多具备自生夕灭的特征,所以minor gc非常频繁,回收速度也比较快
老生代GC Major GC/Full GC
指老生代gc,出现了major gc,经常会伴随至少一次minor gc,major gc的速度一般会比minor gc慢10倍以上
标签:缺点 line 实例 计数 先来 复制算法 script markdown 其他
原文地址:http://blog.csdn.net/qq_21430549/article/details/53208270