视频课程
小黑屋思过中,禁止观看!
评论并刷新后可见

您需要在视频最下面评论并刷新后,方可查看完整视频

视频课程
立即观看
付费视频

您支付费用,方可查看完整视频

¥{{user.role.value}}
课程视频
开始学习
会员专享

视频合集

最全JVM垃圾回收算法详解

  • 课程笔记
  • 问答交流

除了要掌握好JVM架构的上半部分:深入JVM类加载全过程解析深入JVM内存模型(图文视频详解)

你还需要重点掌握JVM的垃圾回收算法,你只有理解了垃圾回收的策略以及算法的具体实现,你才能更好的理解JVM的垃圾回收机制。

为了助大家掌握好JVM垃圾回收算法,这节课我会重点讲解以下7点:

1.JVM垃圾回收机制

2.GC判断策略

3.标记-清除算法

4.标记-复制算法

5.标志-整理算法

6.分代收集算法

7.垃圾回收算法必考点总结

JVM垃圾回收知识点

最全JVM垃圾回收算法详解-mikechen

 

JVM垃圾回收机制

最全JVM垃圾回收算法详解-mikechen

 

评论交流
  1. mikechen

    我就在下方统一回复了:两位同学都回答的非常好 ✗棒棒的✗

    这里的垃圾收集算法基本属于必考点,一般都会结合着收集器一并就问了。

  2. 路正银

    1.如何判断一个对象是否存活?
    有两种方式;
    1、引用计数算法(该算法在两个对象相互引用时无效,现已逐渐废弃)
    2、可达性分析算法

    2.JVM的常见垃圾回收算法有哪些?分别谈谈优缺点?
    标记-清除算法,未标记的对象被清除;优点是简单、易于实现;缺点有,1、算法过程需要暂停整个应用,效率不高,2、标记清除后会产生大量不连续的内存碎片;适用场景:存活对象较多的情况下比较高效,适用于老年代
    标记-复制算法:只复制存活的对象;优点是内存分配时算法不产生内存碎片;缺点有:1、需要两倍的内存空间,2、算法的效率和存活对象的数量有关,存活对象越少,效率越高。适用场合:存活对象较少的情况下比较高效,适用于年轻代
    标记-整理算法:此算法结合了“标记-清除”和“标记-复制”两个算法的优点;优点是内存分配时算法不产生内存碎片;缺点是算法复杂度大,效率比标记-清除低;使用场景:适合存活对象多的老年代回收算法
    分代收集算法,核心思想是根据不同代的特点采取最适合的收集算法

    3.为什么要使用分代回收机制?
    不同的对象有不同的生命周期,因此,可以采取不同的垃圾回收机制,提高效率。
    新生代中的对象存活时间短,在新生代区域需要频繁进行GC,老年代中对象生命周期长,内存回收的频率相对较低,不需要频繁进行回收。

    4.最后再谈谈强引用、软引用、弱引用、虚引用?
    强引用,通过关键字new创建的对象所关联的引用就是强引用。当jvm内存空间不足,jvm宁可抛出OOM,使程序异常终止,也不会靠随意回收具有强引用的“存活”对象来解决内存不足的问题。
    软引用,软引用通过SoftReference类实现,软引用的生命周期比强引用短一些,只有当jvm认为内存不足时,才会去试图回收软引用指向的对象。
    弱引用,弱引用通过WeakReference类实现,弱引用的生命周期比软引用短。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。
    虚引用,虚引用也叫幻象引用,通过PhantomReference类来实现。无法通过虚引用访问对象的任何属性或函数。幻象引用仅仅是提供了一种确保对象被finalize以后,做某些事情的机制。如果一个对象仅持有虚引用,那么它和没有任何引用一样,在任何时候都可能被垃圾回收器回收。

  3. 李鸿翼

    1.如何判断一个对象是否存活?
    可达性分析算法,看对象是否有被gc root引用
    2.JVM的常见垃圾回收算法有哪些?分别谈谈优缺点?
    标记-清除: 优点:简单,容易实现,缺点:效率低
    复制: 优点:不会产生内存碎片, 缺点: 耗费空间
    标记-整理: 优点:不产生碎片 ,容易实现 缺点: 算法复杂
    分代算法: 分代收集,效率高 缺点是算法复杂
    3.为什么要使用分代回收机制?
    由于JVM堆内存不同空间下对象生命周期不一样,需要不同算法来处理

    4.最后再谈谈强引用、软引用、弱引用、虚引用?
    强引用就是普通的变量引用
    软引用 SoftReference 垃圾回收时,内存不够了就回收
    弱引用 WeakReference 垃圾回收立马回收
    虚引用 用的比较少,一般用于跟踪垃圾回收活动