美文网首页
垃圾回收机制

垃圾回收机制

作者: 小川君 | 来源:发表于2018-10-05 09:31 被阅读0次

java中的堆是JVM所管理的最大的一块内存空间,主要用于存放各种类的实例对象;
堆被划分为两个不同的区域,由老年代和新生代 占比为2:1
新生代被划分为三块区域:一个Eden和两个Survivor区域 占比为8:1:1

新创建的对象一般在Eden和其中一个Survivor中,当新生代区域被占满之后,这时候会通过GC来进行垃圾回收,采用的算法是"复制"算法,并将存活下来的对象存放到
另一个Survivor区域中,如果Survivor放不下的话,会存放到老年代区域中,并将Survivor中存活下来的对象进行进行年龄+1;以后每进行一次垃圾回收,存活下来
的对象就会年龄+1;直到年龄满十五,可以将对象移动到老年代区域

老年代区域中的对象相对来说不易回收,发生GC的频率相对来说也比较低,因此采用标记-整理的算法,在对象存活率高德情况下"复制"算法就要执行相对较多的复制
操作,效率就会变低,所以会选择"标记-整理"算法

垃圾回收算法:
复制算法:
将可用内存分成大小相等的两块,每次只使用其中一块,当发生GC的时候,会将存活的对象复制到另一块内存中,并进行排序整理,然后将原先的一块内存进行清理;
实现简单,操作高效
缺点也显而易见,可使用的内存降为原先的一半,并且如果存活的对象较多时,会执行较多的复制操作,效率会有下降
标记-清除
算法分为"标记"和"清除"两个阶段,首先标记出所有需要回收的对象,在标记完成之后统一回收被标记的对象
缺点:
1、效率问题,标记和清除的效率都不高
2、标记清楚之后会产生大量的不连续的内存碎片,会导致当程序需要较大对象分配内存的时候无法找到足够的连续的内存儿不得不提前触发另一次垃圾
回收动作。
标记整理:
在标记-清楚的基础上做了改进,标记阶段相同,标记完成之后不是最直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,在移动的过程中清理掉可回收的
对象,这个过程叫做整理,不会产生像标记-整理那样所产生的内存碎片问题

分代收集算法:
根据内存中对象的存活周期不同,将内存划分为几块 也就是新生代和老年代

相关文章

  • JavaScript的垃圾回收机制

    大纲 1、认识垃圾回收机制2、垃圾回收机制的原理3、垃圾回收机制的标记策略4、垃圾回收机制与内存管理 1、认识垃圾...

  • JS垃圾回收机制(内存问题)

    垃圾收集机制理解 垃圾收集机制:释放无用的数据,回收内存。 垃圾收集机制分类:1)自动回收 2)手动回收 垃圾收集...

  • JVM垃圾回收机制

    JVM垃圾回收 整体思维导图 带着问题理解JVM垃圾回收机制 Java为什么需要垃圾回收机制; 回收哪部分垃圾; ...

  • 垃圾回收机制

    垃圾回收机制—GC Javascript具有自动垃圾回收机制(GC:Garbage Collecation),也就...

  • javascript的垃圾回收机制与内存管理

    一、垃圾回收机制—GCJavaScript具有自动垃圾回收机制(GC:Garbage Collecation),也...

  • Java垃圾回收详解

    深入理解 Java 垃圾回收机制 深入理解 Java 垃圾回收机制 一:垃圾回收机制的意义 java 语言中一个...

  • 常见垃圾回收算法

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

  • 浅谈下垃圾回收机制(1)

    前言:垃圾回收机制在工作中很少碰到,看到阮一峰的书中有写,记录下。 垃圾回收机制与WeakSet(1)垃圾回收机制...

  • JavaScript中的垃圾收集

    JavaScript具有自动垃圾回收机制,垃圾回收机制会按照固定的时间间隔周期性地执行这一操作,垃圾回收机制必须跟...

  • 乐字节Java|GC垃圾回收机制、package和import语

    JavaGC垃圾回收机制、package 和 import语句。 一、GC垃圾回收机制 GC全名:Garbage ...

网友评论

      本文标题:垃圾回收机制

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