垃圾回收算法

1.      标记-清除算法(mark-sweep)最基础的算法

首先标记要回收的对象,然后一次性清除

1)       有两个缺点

清除效率不高

可能会产生大量不连续的内存碎片,当一个较大对象需要分配内存时可能会提前触发另一次垃圾回收

2)       分为存活,可回收,未使用三个状态

2.      复制收集算法(copying

将内存划分为等大的两块,每次使用其中一块,当一块用完时,将存活的复制到另一块,再将已使用的清理

1)       此算法缺陷浪费一半的内存

2)       存活对象较多时,要执行较多的复制,影响效率

3)       现在商用比较倾向使用此方法

不按11分配,按EdenSurvivorSurvivor811

每次使用Eden和一块Survivor,回收时,将存活的对象拷贝到另一块Survivor,然后再清理使用的两块

当一块Survivor内存不足时需要通过分配担保机制进入老年代

3.      标记-整理算法(mark-compact

首先标记要回收的对象,然后让所有存活对象向一端移动,最后清理掉端边界以外的内存

4.      分代收集算法(Generational Collection

分为新生代和老年代

1)       新生代:只有少量对象会存活,使用复制算法

2)       老年代:存活率高,没有额外空间进行分配担保,使用标记清理或标记整理算法

posted @ 2019-07-09 19:41  爱上咖啡的唐  阅读(544)  评论(0编辑  收藏  举报