java和c++最大的不同就是java中不需要手动去回收对象,在运行时jvm会自动帮我们进行垃圾回收,接下来让我们揭开垃圾收集器的面纱

名词解释

并行:多条线程并行工作
并发:多个线程并发执行,但他们不是并行的,有可能交交替执行
吞吐量:吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间))

为什么要垃圾回收?

不回收你养我啊,就和我们电脑磁盘满了删除文件、房间乱了整理房间一个道理

什么时候回收垃圾?

  1. 老年代或年轻代对象满,无法存放新对象时触发GC
  2. 代码中调用System.gc(),触发Full GC,可能会连带Minor GC
  3. 程序运行的时候有一条低优先级的GC线程,它是一条守护线程,当这条线程处于运行状态的时候,自然就触发了一次GC了

垃圾收集器概览

一文读懂Java七大垃圾收集器
图中可以看到,新生代中有三个垃圾回收器,老年代中有三个回收器,而G1既可以在新生代使用也可以在老年代使用。连接线代表可以组合使用的收集器。

各种垃圾收集器的优缺点

新生代垃圾收集器:Serial

一文读懂Java七大垃圾收集器

新生代垃圾收集器:ParNew

一文读懂Java七大垃圾收集器

新生代垃圾收集器:Parallel Scavenge

一文读懂Java七大垃圾收集器

老年代垃圾收集器:Serial Old

一文读懂Java七大垃圾收集器

老年代垃圾收集器:Parallel Old

一文读懂Java七大垃圾收集器

老年代垃圾收集器:CMS

一文读懂Java七大垃圾收集器
运行过程:
一文读懂Java七大垃圾收集器

老少通吃垃圾收集器:G1

一文读懂Java七大垃圾收集器
运行过程:
一文读懂Java七大垃圾收集器
为什么G1收集器可以实现可预测的停顿?

  • G1 收集器避免全区域垃圾收集,它把堆内存划分为大小固定的几个独立区域
  • 跟踪这些区域的垃圾收集进度,同时在后台维护一个优先级列表
  • 每次根据所允许的收集时间, 优先回收垃圾最多的区域**(名称Garbage-First的由来)**
  • 区域划分和优先级区域回收机制,确保 G1 收集器可以在有限时间获得最高的垃圾收
    集效率

总结:收集器虽然有七个,单理解了java的发展历史之后也就不足为奇,比如最早的单核机器运行,就有Serial,后来有多核cpu,就有了ParNew(名字不好理解),再后来既要多线程又要停顿,就有了Parallel Scavenge,高吞吐量+高效的利用cpu时间
再再再后来,就是G1,可以独立使用,不仅老少通吃,还能不牺牲吞吐量情况下控制垃圾回收所造成的停顿时间且不产生内存碎片,目前这也是垃圾收集器理论发展的最前沿成果

垃圾收集算法

复制算法(Coping)

一文读懂Java七大垃圾收集器
一文读懂Java七大垃圾收集器
目前java1.8中年轻代使用的就是复制算法,因为大部分对象都是可被回收的

标记清除算法(Mark-Sweep)

一文读懂Java七大垃圾收集器
如图可知(四个字值1分了( ﹁ ﹁ ) ~→),仅仅是把一些可以回收的对象及逆行了回收,其它存活对象和未使用的区域不做任何处理
不足:存活对象七零八落,碎片化严重,当有对象需要申请连续空间时无法申请到
效率问题

标记整理算法(Mark-Compact)

一文读懂Java七大垃圾收集器
看名字就容易猜到,先标记出可回收对象,然后再对存活的对象进行整理,可以解决复制算法的内存问题也可以解决标记清除算法的碎片问题,简直完美(完美表情)

分代收集算法

不是一种具体的算法,仅仅是对算法的组合,通过对不同的区域使用不同的算法

  • 标记整理算法-》老生代的特点是每次垃圾回收时只有少量对象需要被回收
  • 复制算法-》新生代的特点是每次垃圾回收时都有大量垃圾需要被回收

无论是哪一种算法,都有它的使用场景,比如对象复制算法适合很多对象可回收的情况;标记整理算法适合没有很多内存的情况

如何判定对象是否可回收(是垃圾)

一文读懂Java七大垃圾收集器

总结

收集器那么多,那我该用哪个?
一文读懂Java七大垃圾收集器

当然,在JDK 11当中,加入了实验性质的ZGC。它的回收耗时平均不到2毫秒。它是一款低停顿高并发的收集器,但并没有实际的接触,我们用的都是JDK 1.8????,钉子户了哈哈哈

相关文章:

  • 2022-01-01
  • 2021-05-30
  • 2021-07-19
  • 2021-11-06
  • 2022-01-19
  • 2022-01-26
猜你喜欢
  • 2021-11-16
  • 2021-09-25
  • 2022-12-23
  • 2021-04-23
  • 2022-12-23
  • 2021-05-23
  • 2022-12-23
相关资源
相似解决方案