专栏首页JavaEEJVM --- 垃圾回收

JVM --- 垃圾回收

一、YGC和full GC的区别

  • YGC(minor GC):只针对新生代区域进行GC,发生得非常频繁,回收速度也很快;
  • Full GC(major GC):指发生在老年代的GC,出现了Full GC,经常会伴随至少一次以上的YGC,速度比YGC慢10倍以上,因为老年代和新生代空间分别是堆空间的2/3,1/3,老年代空间更大,当然回收更慢。

二、四大回收算法

垃圾回收有四大算法,这四种算法就是确定了这个对象是垃圾后,怎么进行回收。

  • 引用计数法:对象被引用时加一,少一个引用时减一,当引用为零时,就是垃圾。这种方式的缺点就是每次对象赋值时都要维护引用计数器,这个计数器本身也有一定的内存消耗;第二个缺点就是较难处理循环引用。JVM一般不采用这种方式。
  • 复制算法:新生代的YGC采用的就是这种算法。上一篇说了,伊甸园区进行YGC后存活的对象,就会使用复制算法复制到from区,from区和伊甸园区再次触发YGC后存活的对象,就会被复制到to区。该算法优点是,因为是全盘复制过去的,所以不会产生碎片,缺点是耗空间,from区有多大,to区也得有多大,这两个区大小是一比一;而且,假如某些极端的情况下,比如定义了很多静态的对象,伊甸园区对象进行YGC时,好多对象没被回收,那么要复制的对象就会很多。
  • 标记清除:老年代采用的一般就是标记清除算法,或者是标记清除 + 标记整理混合实现。标记清除分为两步,先标记出要回收的对象,然后对这些被标记的对象统一回。优点是不会浪费额外的空间,缺点就是回收后的空间不是连续的,会产生内存碎片,且分两步进行,比较耗时。当JVM可使用内存快被耗尽时,GC线程就会暂停程序,随后标记要回收的对象,统一回收后,程序再恢复运行。
  • 标记整理(标记压缩):上面说了标记清除算法不会浪费额外空间,但是会产生内存碎片。所以标记整理算法就是比标记清除又多了一步,整理那些不连续的空间(将存活的对象往一端滑动,后面的空间就是连续的了),这样就没有内存碎片了。缺点就是耗时。

那么哪种回收算法最好呢?没有最好,只有最合适。复制算法省时间,但是耗空间,标记整理算法不耗费额外的空间,但是费时间。新生区因为对象存活率底,所以适合用复制算法,而老年区适合用标记清除 + 标记整理。所以JVM垃圾回收算法又称为分代回收算法。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JVM垃圾回收(下)

    接着上一篇,介绍完了 JVM 中识别需要回收的垃圾对象之后,这一篇我们来说说 JVM 是如何进行垃圾回收。

    健程之道
  • JVM垃圾回收(上)

    Java 中的垃圾回收,常常是由 JVM 帮我们做好的。虽然这节省了大家很多的学习的成本,提高了项目的执行效率,但是当项目变得越来越复杂,用户量越来越大时,还是...

    健程之道
  • JVM垃圾回收算法

    java404
  • Hotspot JVM垃圾回收器

      前两篇《JVM入门——运行时数据区》《JVM常见垃圾回收算法》所提到的实际上JVM规范以及常用的垃圾回收算法,具体的JVM实现实际上不止一种,有JRocki...

    用户1148394
  • 探究JVM——垃圾回收

    垃圾回收主要考虑三件事情:哪些内存需要回收?什么时候回收?如何回收? 一、哪些内存需要回收? 堆内存:对于JVM 来说,垃圾回收主要是针对堆内存中的对象实例。 ...

    欠扁的小篮子
  • JVM 垃圾回收机制

    首先JVM的内存结构包括五大区域: 程序计数器、虚拟机栈、本地方法栈、方法区、堆区。其中程序计数器、虚拟机栈和本地方法栈3个区域随线程启动与销毁, 因此这几个区...

    烟草的香味
  • JVM 垃圾回收算法

    在标记阶段首先通过根节点(GC Roots),标记所有从根节点开始的对象,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。

    一个会写诗的程序员
  • JVM垃圾回收机制

    JVM垃圾回收机制是java程序员必须要了解的知识,对于程序调优具有很大的帮助(同时也是大厂面试必问题)。

    Liusy
  • jvm垃圾回收算法

    云123

扫码关注云+社区

领取腾讯云代金券