1 垃圾回收算法
- 标记算法  - 该算法分成两步完成: - 在java程序运行过程中,当有些对应没有被gc root所引用时,那么该对象就会被标记。
- 当标记完之后,那些被标记的对应,就会被清除掉,也就是释放内存。释放之后,会那段内存的起始位置加入到内存的空内存地址库。当再有新对象被创建时,首先会查找地址库中的内存块是否有符合条件(内存大小是否够用)的,如果有,就将其分配给新对象,否则就另外开辟一段。
 
- 在
- 优点: - 清理速度很快 - 只需要将被标记的对象的起始地址记录下来,就可以完成清理工作,所以速度很快 
 
- 缺点: - 容易产生内存碎片 - 从上图中可以看到,由于很多被释放掉的对象都是穿插着的,所以很难有一块完整的空内存,有时候总的空内存是足够分配给一块新的需要大内存的对象的,但是由于非常零碎,所以没办法利用。 
 
- 标记整理  - 该算法还是分两步: - 首先第一步和标记算法一样,都是先给没有被gc root引用的对象进行标记
- 这一步,该算法做了一个整理的操作:也就是将一些还在被gc root引用的对象向前移动,这里的移动包括数据,以及一些引用的地址,都需要做修改,所以这一步需要消耗一定的时间。相对于标记算法而言,速度较慢
 - 优点: - 能够有效利用被释放的空间,相对于标记算法,不会再产生内存碎片了
 
- 缺点: - 速度没有标记算法快,较慢
 
 
- 首先第一步和标记算法一样,都是先给没有被
- 复制  - 该算法有两个区域,一个是 - FROM区域,另一个是- TO区域,该算法执行分成三步:- 先标记处没有被 - gc root引用的对象
- 然后将 - FROM被标记的对象释放掉,在将没有被释放掉的对象复制一份到- TO区域中- 复制完成之后:  
- 然后在交换 - FROM和- TO的位置,这样- TO就又变成了一个空的内存空间- 交换完以后:  
 - 优点:- 不会产生内存碎片
 
- 缺点:- 需要占用两块内存空间,所需要的内存空间较大
 
 
写在最后
欢迎大家关注鄙人的公众号【麦田里的守望者zhg】,让我们一起成长,谢谢。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
 Comment













