手机内存给每个应用分配的内存都是有限的,如果频繁的创建对象,而没有对无用的对象进行回收的话就会造成OOM(内存溢出)
查找没用的对象有两种算法
1、引用计算法:当对象创建的时候设置一个引用计算器,当对象被引用的时候就+1,取消引用时就-1,当引用为0的时候,那么这些为0的对象就是垃圾回收的目标。但是他有一个缺点,就是两个没用的对象相互持有引用的话,就没办法查到。
2、可达性算法:就是从对象的根节点进行查找,不可达的对象即为垃圾。
回收没用的对象有四种算法:
1、标记清除法:分为标记阶段和清除阶段,标记阶段就是对所有需要回收的对象进行标记,清除阶段就是对标记的对象进行清除。
2、复制清除法:使用的内存可以分为两块,一块为没有使用的,一块是使用的,就是当使用的内存满的时候就复制到未使用的,然后对使用的进行回收。
3、标记压缩发:标记过后不需要立即清除,将存活的对象压缩到一端,清除边缘地区的。
4、分带算法:将新创建的对象放在年轻带区域,因为年轻 带回收快,所以用复制清除算法,当几次回收之后,仍然存活的对象放在老年区域,因为老年区域回收慢,所以可以用标记压缩法,也可以用标记清除法。
网友评论