JVM面试题

2023年 8月 13日 42.1k 0

1. 背景

储备足够多的知识是解决JVM调优的必要条件,努力掌握每一次机会,不断地去尝试,才能提高自己的水平

2. 面试题记录

2.1. 解释#年轻代垃圾回收机制

-Xms3G , -Xmx3G, -Xmn1G, -XX:SurvivorRatio=8 -XX:PrintGCDetails,
-verbose:gc

eden区发生minor gc的时候有95% 以上的对象是垃圾对象

2.2 JVM调优

现象: TP99耗时偏高,有明显的毛刺,发现YGC和FGC频繁

解决: 频繁的YGC导致本该在YGC就被回收的对象进入了老年代,也导致了老年代继续触发FGC,频繁的STW,导致TP99偏高

优化目标:减少YGC的次数和耗时,减少FGC的次数和耗时

  • 放大年轻代
  • 元数据区的默认初始值只有21M,如果动态代理对象比较多,就会导致元空间进行FGC,导致STW,观察了一下元空间常住对象的大小,大概100M,直接指定元空间和最大容量为256M,防止动态调整
  • 使用并发预清理
  • 2.3 jvm垃圾回收算法

    标记清除

    复制算法

    标记整理压缩

    分代收集

    2.3 三色标记法

    黑白灰,初始状态,所有的对象都是白色的,只有GC Roots是黑色的,

    白色代表没有被垃圾回收器访问过,黑色表示对象已经被GC收集器访问过,且这个对象的所有引用都已经被扫描过, 灰色表示至少存在一个引用没有被扫描过

    原始快照和增量更新

    2.3 双亲委派机制

    类加载器就是用来把类加载到jvm中的一种东西,对于任何一个类,由他的加载器和它本身确定在jvm中的唯一性,

    引导类加载器、扩展类加载器、应用类加载器、用户自定义加载器,用户可以继承ClassLoader类,实现其中的findClass方法来实现自定义的类加载器

    保护核心类的安全,防止被篡改, 避免类的重复加载,一个类只会被加载一次

    2.4 java中的强引用,软引用,弱引用,虚引用

    强引用,宁可OOM,虚拟机也不会回收持有强引用的对象, 软引用在jvm oom之前会回收到软引用对象
    SoftReference和weakReference,不管内存足不足弱引用只要GC就会被回收

    2.5 JVM的类加载机制

    加载,连接, 初始化,使用,销毁

    2.6 JVM什么时候 FGC

    system.gc()

    老年代空间不足

    promotion failed 是在minor gc的时候,survivor space 放不下对象放入老年代,老年代也放不下导致的

    concurrent mode failure 是在执行FGC的时候对象要放入老年代,而此时老年代空间不足导致的

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论