美文网首页
垃圾回收

垃圾回收

作者: sunshaohua520 | 来源:发表于2021-05-24 20:23 被阅读0次

标记阶段

判断对象是否可回收方法:

   1.引用计数法,问题:循环引用

   2.可达性分析法;

        不可达的对象一定会被回收吗?不一定,如下

回收过程的两次标记:

1.第一次标记:GC Roots到该对象没有引用链。

2.第二次标记:如果对象重写finalize()方法,则被加入到队列,由优先级较低的线程执行finalize(),如果执行发现与引用链建立联系,则该对象被移除“即将回收”集合。finalize()只可能调用一次。

GC roots包含以下几类元素:

1.虚拟机栈上引用的对象;

2.本地方法栈上引用的对象;

3.方法区中类静态属性引用的对象;如静态变量

4.方法区中常量引用的对象;如常量池的引用

5.被同步锁(sychnorized)住的对象;

清除阶段

垃圾收集算法:标记-清除算法,复制算法,标记-压缩(标记-整理)算法;

新生代:复制算法

老年代:标记压缩算法

增量收集算法:每次收集一小片区域,和用户线程交替执行,多次收集

分区算法:将整个堆分成多个小区域,每一个小区域独立使用、独立回收。如G1

并发:多个线程在某一时间段内同时发生

并行:多个线程在任一时间点内同时发生

引用

强引用:只要引用关系存在,就不会回收 Object object = new Object();

弱引用:引用关系虽然存在,但会在内存空间不够时被回收 

    SoftReference sr = new SoftReference<Object>(new Object());

    Object = sr.get();

软引用:引用关心虽然存在,但会在下次回收时候被回收

    WeakReference WeakHashMap

虚应用:一个对象是否有虚引用,对其生存周期没有任何影响,也无法通过虚引用获得对象实例,虚引用的目的是在回收时,收到系统通知

垃圾收集器

串行回收器:Serial,Serial Old

并行回收器:ParNew,Parallel Scavenge,Parallel Old

并发回收器:CMS,G1

回收器组合关系

Serial回收器:jdk1.3之前回收新生代唯一选择,单线程采用复制算法串行回收,stw,

Serial Old回收器:老年代版本,单线程采用标记整理算法,串行回收,stw

ParNew回收器:Serial的多线程版本

CMS:低延迟,第一款并发回收器,标记清除算法,会产生内存碎片,对cpu资源敏感,无法清理浮动垃圾(并发标记过程产生的垃圾)

    初始标记 stw

    并发标记

    重新标记 stw

    并发清理

    重置线程

Parallel Scavenge:吞吐量优先,自适应调节吞吐策略,复制算法,并行回收,stw,适合后台运算而不需要交互,如批量处理、订单处理、工资支付等

Parallel Old:是Parallel Scavenge的老年代版本

G1回收器

G1:面向服务单,适用多核CPU、大内存的机器,满足低延迟同时兼顾吞吐量

    并发、并行

    分区收集:同时兼顾年轻代、老年代

    空间整合:复制+标记整理算法

    可预测的停顿时间模型:可指定回收区域,缩小回收范围,

   缺点:额外的内存占用,及更高的负载 

G1回收过程:

垃圾收集器总结

相关文章

  • 简单理解垃圾回收

    什么是垃圾回收? 垃圾回收的是什么? 如何判断为垃圾? 垃圾是怎样被回收的? 垃圾回收哪些区域的内存? 什么是垃圾...

  • JVM(二) GC算法与分代回收策略

    可达性分析 GCRoot场景 垃圾回收算法 分代回收策略 引用 垃圾回收 垃圾回收(Garbage Collect...

  • JVM调优之垃圾定位、垃圾回收算法、垃圾处理器对比

    谈垃圾回收器之前,要先讲讲垃圾回收算法,以及JVM对垃圾的认定策略,JVM垃圾回收器是垃圾回收算法的具体实现,了解...

  • 01垃圾回收机制

    垃圾回收(Garbage Collection,GC) 垃圾回收就是释放垃圾占用的空间 内存的动态分配和垃圾回收,...

  • Java 垃圾收集(GC)浅谈

    Java 垃圾收集(GC)浅谈 为什么需要垃圾回收?哪些内存需要回收?什么时候回收?如何回收? 为什么需要垃圾回收...

  • JVM垃圾回收机制

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

  • 垃圾回收

    如何查看当前JVM使用的垃圾回收器? 如何指定使用CMS回收? 如何打印回收日志? 垃圾回收过程 CMS垃圾回收的...

  • JVM常见垃圾回收器介绍

    垃圾回收器简介 在新生代和老年代进行垃圾回收的时候,都是要用垃圾回收器进行回收的,不同的区域用不同的垃圾回收器。分...

  • JavaScript的垃圾回收机制

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

  • 一文带你深入了解JVM性能调优以及对JVM调优的全面总结

    目录 JVM调优 概念 基本垃圾回收算法 垃圾回收面临的问题 分代垃圾回收详述1 分代垃圾回收详述2 典型配置举例...

网友评论

      本文标题:垃圾回收

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