JVM面试真题总结(五)

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

在这里插入图片描述

内存泄漏的常见原因有哪些?

内存泄漏通常发生在程序错误地持有了对不再需要的对象的引用

  • 导致垃圾收集器无法回收这些对象,使得这些对象持续占用内存。

以下是一些可能导致内存泄漏的常见原因:

长期持有对象引用:

  • 如果一个对象的引用被长期持有,那么垃圾收集器就不能回收这个对象。
    • 例如,如果你将对象添加到集合中,但在不再需要这个对象时忘记从集合中移除它
      • 那么这个对象就会一直存在于内存中。

未关闭的资源:

  • 例如,如果你打开了一个数据库连接或文件流,但在使用完毕后忘记关闭它
    • 那么相关的资源就会被持续占用,直到程序结束。

循环引用:

  • 当两个或多个对象相互引用时,如果它们之间没有断开引用关系
    • 就会导致这些对象所占用的内存没有被释放。

什么是浮动垃圾?它是如何产生的?

浮动垃圾是指在进行垃圾收集过程中新生成的,但是在当前垃圾收集结束后无法被回收的对象。

其主要出现在并发垃圾收集过程中。

  • 举个例子,假设我们有一个并发垃圾收集器,它在进行垃圾收集的时候,并不会暂停应用线程。
  • 当垃圾收集器在标记阶段标记出所有的可达对象后,应用线程可能会继续运行并创建新的对象。
  • 如果这些新的对象在当前垃圾收集结束之前变得不可达,那么它们就会成为浮动垃圾
  • 因为它们没有被标记为可达,但是在当前的垃圾收集过程结束之前,垃圾收集器又无法开始新的垃圾收集来回收它们。

浮动垃圾并不会影响程序的正确性,但是它可能会暂时占用一些内存,直到下一次垃圾收集时才能被回收。

  • 因此,过多的浮动垃圾可能会影响程序的内存使用效率。

什么是三色标记法?请描述其回收流程

三色标记法是一种用于垃圾回收的算法,主要用于处理并发垃圾回收的问题。

在这个算法中,所有的对象都会被标记为三种颜色之一:

  • 白色、灰色和黑色。

白色:

  • 表示这些对象是垃圾对象,即没有被任何其他对象引用,或者没有被任何根对象直接或间接引用的对象。

灰色:

  • 表示这些对象是活动对象,即被根对象直接或间接引用,但是这些对象可能还引用了一些白色对象。

黑色:

  • 表示这些对象是活动对象,并且这些对象没有引用任何白色对象,或者说这些对象已经被扫描过了。

回收流程如下:

  • 初始阶段,所有对象都被标记为白色。

  • 标记阶段开始时,根对象被标记为灰色。

  • 然后,垃圾收集器选择一个灰色对象,扫描这个对象的所有引用。

    • 如果引用的对象是白色,那么这个对象会被标记为灰色。
    • 然后,原来的灰色对象被标记为黑色。
  • 重复第三步,直到没有灰色对象为止。

  • 最后,在清除阶段,所有的白色对象都被认为是垃圾对象,并被回收。

这个算法的一个主要优点是,它可以在程序的执行过程中并发地进行垃圾回收,而不需要暂停整个程序。

在实际的应用场景中,如Java的CMS垃圾回收器,就使用了三色标记法。

解释GC的分代收集算法及其设计原则

GC(垃圾收集)分代算法基于这样一个观察:大多数对象很快就会变得不可达

  • 而剩下的一些对象往往会持续存在一段很长的时间。

  • 因此,GC分代算法将对象分为两类(有些实现可能会有更多的类别):

    • 年轻代和老年代。

年轻代中的对象是最近创建的。

当年轻代被填满时,就会触发一次年轻代垃圾收集(Minor GC)。

  • 这次收集会清理掉大部分对象,因为大多数对象生命周期都很短。
  • 这种收集通常很快就会完成。

如果对象在Minor GC后仍然存活,它们就会被移动到老年代。

  • 当老年代被填满时,会触发一次老年代垃圾收集(Major GCFull GC)。
  • 这种收集可能涉及到整个堆,所以可能会需要更长的时间来完成。
  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值