本篇针对第二个问题:如何对垃圾进行回收-方法论
首先讲解垃圾回收算法,垃圾回收算法是一个演变的过程。
-
标记-清除算法:首先标记要回收的对象,然后进行回收。
缺点:产生大量内存碎片 -
复制算法:算法原理是将内存划分成两半A、B,每次只使用其中的一半,当发生GC的时候将未被标记的区域复制到另一半,然后再将另一半全部清除掉。在实际的使用中,新生代就会使用复制算法,分为一个较大的eden区和两个较小的survior区域,一般比例是8:1:1。每次分配新对象就是分配在一个eden和survior中,当回收时就把存活对象放在另一个survior中。
缺点:如果是将内存对半分,则太浪费内存了。 -
标记-整理算法:算法原理是针对标记-清除算法会产生大量内存碎片,现在则是将存活对象向同一个方向进行移动,然后再将剩余的死亡对象给清除掉。针对老年代对象大多数都存活的特点,一般会使用这个算法。
-
分代收集算法:将内存分区,对不同内存使用不同的收集算法。
新生代:对象存活率低,只有少量能存活,有老年代能担保,所以可选择复制算法。
老年代:对象存活率高,只有少量死去,没有内存为其担保,所以可选择标记-整理或标记-清除算法。
网友评论