赞
踩
GC主要发生在heap(堆)中
GC有识别垃圾和清除垃圾两步,分别的算法为下列算法。
识别垃圾算法:
1.引用计数法 2.可达性分析
引用计数法存在循环引用的问题(引用一次对象,计数加一,当方法结束,计数减一。如果在方法中对象相互引用,导致栈中方法关闭后对象技术大于0,不被识别为垃圾)
可达性分析(也叫根搜索法GC Roots)
只要可以顺着GC Roots找到堆中的对象,就不是垃圾。
清除垃圾算法:
1.标记清除算法(Mark-Sweep)
2.复制算法(copying)
3.标记整理算法(Mark-Compact)
4.分代回收
1)标记清除算法
特点:实现简单,但是有内存碎片。
先进行标记,标记的垃圾直接清除,不对内存区域进行整理。内存空间被一个个对象隔开,没有连续,因此清除后留下的空闲空间为一个个内存碎片。
2)复制算法:
特点:无内存碎片,但是内存利用率低。
回收前将内存区域分为两半,有垃圾的一半内存区域先标记垃圾,将存活的对象依次排放到原有的未使用的内存区域,再将垃圾清除后放到存活对象的后面,之后开始使用另一半的未使用的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。