垃圾回收算法没那么难,一文看懂3个gc算法
jvm内存是有限的,每当内存快满的时候,就需要腾出来一些空间存放新创建的对象。
打个比方,这些算法像是图书馆的管理员,在内存中的对象就像书架上的书,图书管理员采用某种方式整理图书,每当顾客买走一些书,图书管理员就要重新整理书架,腾出地方放新书。
java自带了三种算法来实现垃圾回收。
gc之标记清除算法
分为两步
1.标记
根据GC Root(gc root指向的对象都是有用的,即不可回收的,如图中蓝紫色的块是不可回收的),灰色的块没有被指向,这些对象被标记成可以回收的,如图中灰色的方块。
2.清除
将标记后的灰色方块清空,即图中灰色清空,变成白色
gc之标记整理算法
分为两步
1.标记
也是和上边一样,标记需要回收的地址
2.整理
将不可回收的对象存放在一起
gc之复制算法
分为两步
1.标记
标记那些不需要回收的对象(注意,这里是不需要回收的对象)
2.复制
首先说明:堆中新生代分为伊甸园区、幸存者0区(也叫From区)、幸存者1区(也叫To区)。
对象会先存在From区,当触发垃圾回收,From区中的数据会复制到To区,并且,原来的From区,变成现在的To区,原来的To区变成现在的From区
总结:
1.标记清除算法,就像顾客从书架上买走一些书,书架上就空出一个一个空格
2.标记整理算法,就像图书管理员把这些书整理整理放到一起
3.复制算法,就像图书管理员将这些书全都搬到另一个书架上
结尾:欢迎在下方留言,如有问题,必回复,不信你试试(嘻嘻)