1.三种基本的垃圾回收算法
1>标记-清除法
①先将从树根开始,可以到达的对象标记为可达(JVM中的对象们存储为一颗树)
②将没有标记的对象清除掉
缺点:会产生大量内存碎片
2>复制算法(新生代)
①先将a区域中的可达对象标记,然后复制到b区,再删除a区全部对象
优点:没有碎片空间,速度快
缺点:浪费大量空间(50%)
3>标记-压缩算法(老年代)
将可达对象标记,清除不可达对象,向左压缩
优点:不浪费空间
缺点:慢
新生代回收方式:
首先新生代分为三个区:eden、s1、s2(8:1:1)
新创建的对象会先入eden,一段时间后进行gc,gc时先将可达的标记,并复制到s1中,然后删除eden中的对象(全部),之后在gc时标记s1与eden中的的可达对象,复制到s2中,删除eden与s1中的全部对象…
【经过多次gc仍然存活的进入老年代;大存储空间对象直接进入老年代】
老年代使用标记-压缩算法:
略