此处记录下对gc算法的理解
1.对于标记清除,分为2部分,先进行标记,然后进行清除,如下图所示:
对上图中的灰色部分进行垃圾回收,回收后的截图如下所示:
从图中可知,进行标记清理后,可以看出,清楚后的内存可用内存增加,但是清除垃圾后的内存地址不连接,出现垃圾碎片,当有大对象需要进行内存分配时,会因为找不到足够内存进行分配对象而造成垃圾回收,频繁的垃圾回收影响效率和性能
2.对上一个垃圾收集算法的改进,引出了复制算法
所谓复制算法,就是把内存分为2块等同大小的内存空间(A和B),使用A进行内存的使用,当A部分的内存不足以分配对象而引起内存回收时,就会把存活的对象从A内存块放到B内存块中,后把A内存块中的对象全部清除,在B内存块中使用,当B内存不足以分配内存时,就会把B中存活的对象放到A内存块中,然后把B中对象全部清除,如此循环
使用这种方式可以避免出现空间碎片(内存中不连续的空间),不过会浪费一半的内存,降低空间的使用率。
3.由于前两种都有问题,提出了第三种垃圾收集算法:标记整理
前面标记部分同标记清除部分,不同的地方在于,标记清除中只是把可