大家好,今天给各位分享快要gc前是什么感觉的一些知识,其中也会对gc之前是什么感觉进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
JVM热门面试题(几乎每次都会问)1、如何判别垃圾对象?
判别方法一般有两种:引用计数法和可达性分析。
(1)引用计数法
引用计数法就是给每个对象增加引用计数器,如果引用为0则认为是垃圾。但它无法解决相互引用的问题,因此目前商业JVM都不会使用该方法。
(2)可达性分析
可达性分析就是,从GCroot开始搜索,如果一个对象没有引用链连接到GCroot节点,则证明此对象不可用,然后根据一定的算法进行回收。在Java中,可以作为GCroot的对象包括:
虚拟机栈中引用的对象方法区中类静态属性引用的对象。方法区中常量引用的对象。本地方法栈中JNI(JavaNativeInterface)引用的对象2、什么时候会发生GC?
(1)新生代满了后进行minorGC;
(2)在进行MinorGC之前,JVM会检查老年代最大可用剩余连续空间是否大于新生代所有对象总空间,如果大于则安全;如果小于,则:
①HandlePromotionFailure是否为True担保失败,如果是则检查老年代最大可用剩余连续空间是否大于历次晋升到老年代对象的平均大小:
如果大于则尝试进行MinorGC,如果小于则进行FullGC(MajorGC)②如果HandlePromotionFailure为False,则直接进行FullGC(MajorGC)
(3)老年代空间使用率超过阈值,触发FullGC
(4)元空间(永久代)空间不足时,触发FullGC
(5)CMSGC触发concurrentmodefailure(并发清理过程中,老年代正在清理,新生代晋升了新对象/分配大对象放入老年老年代,导致老年代空间不足以存放所有垃圾),触发FullGC
(6)调用System.gc主动触发GC:注意不一定立即回收,甚至不一定回收,只是建议JVM此时是一个执行GC的好时机,可以利用System.runFinalization();强制调用已经失去引用的对象的finalize方法,使得justRanFinalization=true,才会触发Runtime.getRuntime().gc();执行回收。
3、MajorGC和FullGC有什么区别?
MajorGC:清理老年代FullGC:清理整个堆空间,包括年轻代和老年代、永久代permgen(1.7-)、元空间metaspace(1.8+)事实上很多MajorGC是由MinorGC触发的,因此一般没有细分。
结束语后面面试官一定会深入问CMS、G1、ZGC,如果想继续跟进了解,请点个关注吧。
关注我,带你像准备高考一样有计划地准备大厂面试!(当前:2022年第2周)
周一:新闻动态——了解岗位要求、薪资,找到目标
周二:编程刷题——高频算法面试题
周三:专业真题——高频连环炮提问
周四:面试提问——HR面的问题如何回答
周五:热门推荐——高效工具
关于本次快要gc前是什么感觉和gc之前是什么感觉的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。