常见的垃圾回收算法有:算法
标记-清除算法、复制算法、标记-整理算法、分代收集算法工具
标记—清除算法包括两个阶段:“标记”和“清除”。 标记阶段:肯定全部要回收的对象,并作标记。 清除阶段:将标记阶段肯定不可用的对象清除。对象
缺点:生命周期
标记和清除的效率都不高。
会产生大量的碎片,而致使频繁的回收。内存
内存分红大小相等的两块,每次使用其中一块,当垃圾回收的时候, 把存活的对象复制到另外一块上,而后把这块内存整个清理掉。get
缺点:博客
须要浪费额外的内存做为复制区。
当存活率较高时,复制算法效率会降低。it
标记—整理算法不是把存活对象复制到另外一块内存,而是把存活对象往内存的一端移动,而后直接回收边界之外的内存。io
缺点: 算法复杂度大,执行步骤较多效率
目前大部分 JVM 的垃圾收集器采用的算法。根据对象存活的生命周期将内存划分为若干个不一样的区域。通常状况下将堆区划分为新生代( Young Generation 和老年代( Tenured Generation ),永久代( Permanet Generation )。
老年代的特色是每次垃圾收集时只有少许对象须要被回收,而新生代的特色是每次垃圾回收时都有大量的对象须要被回收,那么就能够根据不一样代的特色采起最适合的收集算法。
Young:存放新建立的对象,对象生命周期很是短,几乎用完能够当即回收,也叫 Eden 区。
Tenured: young 区屡次回收后存活下来的对象将被移到 tenured 区,也叫 old 区。
Perm:永久带,主要存加载的类信息,生命周期长,几乎不会被回收。
缺点: 算法复杂度大,执行步骤较多。
本文由博客群发一文多发等运营工具平台 OpenWrite 发布