美文网首页
常见的几种垃圾回收算法

常见的几种垃圾回收算法

作者: 向上吧_少年 | 来源:发表于2023-04-05 10:02 被阅读0次

标记清除

1.标记清除算法分为标记清除两个阶段,首先通过可达性分析,标出所有需要回收的对象,然后回收统一需要回收的对象。
2.缺陷:一个是效率问题,标记和清除过程效率不高,另外一个是清除后会造成大量的碎片空间,有可能会造成在申请大块内存的时候没有足够的连续空间导致再次GC。

复制算法

1.为了解决碎片空间问题,出现了复制算法。复制算法的原理是将内存分为两块,每次申请内存时都使用其中的一块,当内存不够时将这一块内存所存活的对象复制到另一块上,然后将已使用的内存空间整个清除掉。
2.缺陷:复制算法解决了空间碎片问题,也带来了新的问题。因为每次在申请内存时,都只能使用其中的一半内存空间,内存利用率严重不足。
3.JVM中新生代采用的就是复制算法进行GC,针对内存利用率不足问题做了一些优化。IBM公司的专门研究表明,新生代中的对象 98% 是“朝生夕死”的,意思是说,在新生代中,经过一次 GC 之后能够存活下来的对象仅有 2% 左右。所以并不需要按照1:1的比例划分出两块内存空间,而是将内存分成三块,一块较大的Eden区,和两块较小的Survivor区。其中Eden区占80%内存,两块Survivor各占10%的内存。在创建新的对象时,只使用Eden区和其中的一块Survivor区,当进行GC时,把Eden区和Survivor区存活的对象全部复制到另一块Survivor区,然后清理掉Eden区和已使用的Survivor区。这种内存划分方式解决了内存利用率问题,在每次创建对象时,可用内存为90%(80%+10%)当前内存容量。

标记整理

1.复制算法在GC后存活对象较少的情况下效率比较高,但如果存活的对象比较多,会执行较多的复制操作,效率就会下降。而老年代的对象在GC之后存活率就比较高,所以就有了标记整理算法
2.标记整理算法标记过程与标记清除算法的标记过程一样,但标记之后不会进行直接清理,而是将所有存活的对象都移动到内存的一端,移动结束后直接清理掉剩余的部分。

分代收集

1.分代收集是将内存划分为新生代和老年代,分配的依据是对象的生存周期,或者说是经历过的GC次数。对象创建时,一般在新生代申请内存,当经历过一次GC之后如果对象还存活着,那么对象年龄+1,当年龄超过一定的值(默认值时15,可通过参数-XX:MaxTenuringThreshold来设定),如果对象还存活,那么该对象会进入老年代。

相关文章

  • 深入理解Java虚拟机之垃圾收集算法篇

    这篇文章将讲解垃圾回收的概念以及对那些区域进行垃圾回收,最后讲解几种常见的垃圾回收算法。 概述 什么叫垃圾收集器?...

  • (四)JVM-垃圾收集算法

    垃圾回收算法的好坏直接影响到程序运行效率,接下来对几种常见的回收算法进行介绍。 标记-清除算法(Mark-Swee...

  • (十二)golang gc分析

    垃圾回收算法 业界常见的垃圾回收算法有以下几种:引用计数:对每个对象维护一个引用计数,当引用该对象的对象被销毁时,...

  • G1垃圾回收器详解

    在前一篇的文章《HotSpot垃圾回收算法概述》里面,对于Serial, Parallel和CMS几种垃圾回收器做...

  • 史上最全Java面试题之垃圾回收部分!(带全部答案)

    关于垃圾回收 你知道哪些垃圾回收算法? 垃圾回收从理论上非常容易理解,具体的方法有以下几种: 1. 标记-清除 2...

  • Java 面试专题 - JVM 垃圾收集、内存管理

    垃圾回收算法 垃圾回收从理论上非常容易理解,具体的方法有以下几种: 标记-清除 标记-复制 标记-整理 分代回收 ...

  • 常见垃圾回收算法

    什么是垃圾回收(GC) 垃圾回收机制是一种找到内存中的垃圾将其释放并回收空间的机制 常见的垃圾回收算法 引用计数法...

  • 每天一个知识点(7)-JVM-垃圾收集器

    上一节介绍了垃圾回收算法,垃圾收集器是垃圾回收算法的具体实现。这里以常见的垃圾收集器的组合方式进行介绍: Seri...

  • 几种垃圾回收算法

    垃圾回收GC的全拼是 Garbage Collection 其在维基百科的定义是: 在计算机科学中,垃圾回收(英语...

  • JVM垃圾回收

    GC垃圾回收流程 垃圾收集算法 垃圾回收算法 引用类型 垃圾回收的时机 1.垃圾收集算法 (1).引用计数算法含义...

网友评论

      本文标题:常见的几种垃圾回收算法

      本文链接:https://www.haomeiwen.com/subject/dreeddtx.html