Skip to content

面试速答(先看这里)

**一句话结论:**大的阶段可以分为类的加载、类的使用、以及类的卸载。

60秒标准回答:

一个类从诞生到卸载,大体分为如下几步

大的阶段可以分为类的加载、类的使用、以及类的卸载

其中类的加载阶段又分为加载、链接、初始化。其中连接过程又包含了验证、准备和解析

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**一个类从诞生到卸载,大体分为如下几步:
  • **要点2:**其中类的加载阶段又分为加载、链接、初始化。
  • **要点3:**类的使用,即是类在加载完毕后,会有代码段来引用该类,如初始化该类的对象,或者通过反射获取该类的元数据。
  • **要点4:**这个时候,我们需要明白一个问题,我们知道,JVM自带的类加载器因为需要一直加载基础对象,所以JDK自带的基础类是一定不会被回收掉的,那么会有哪些类会被回收掉呢?
  • **要点5:**答案就是那些自定义类加载器一些场景的类会被回收掉,如tomcat,SPI,JSP等临时类,是存活不久的,所以需要来不断回收

**记忆锚点:**ClassLoader → 如初始化该类的对象 → 案就是那些自定义类 → 加载器一些场景的类 → 或者通过反射 → FULLGC

加分表达:

  • 答案就是那些自定义类加载器一些场景的类会被回收掉,如tomcat,SPI,JSP等临时类,是存活不久的,所以需要来不断回收

追问准备:

  • 围绕「ClassLoader」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「如初始化该类的对象」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「案就是那些自定义类」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

一个类从诞生到卸载,大体分为如下几步:

B(2HPV@CHG@72JB`FLRRZ_C.png

大的阶段可以分为类的加载、类的使用、以及类的卸载。

其中类的加载阶段又分为加载、链接、初始化。其中连接过程又包含了验证、准备和解析。

加载阶段 ​

📄 Java中类加载的过程是怎么样的?

打开文档:Java中类加载的过程是怎么样的?

类使用过程 ​

类的使用,即是类在加载完毕后,会有代码段来引用该类,如初始化该类的对象,或者通过反射获取该类的元数据。

类卸载过程 ​

假如说该类满足下面2个条件:

  1. 该类所有的实例都已被GC回收。
  2. 该类的ClassLoader已经被GC回收。

那么该类会在FULLGC期间从方法区被回收掉。

这个时候,我们需要明白一个问题,我们知道,JVM自带的类加载器因为需要一直加载基础对象,所以JDK自带的基础类是一定不会被回收掉的,那么会有哪些类会被回收掉呢?

答案就是那些自定义类加载器一些场景的类会被回收掉,如tomcat,SPI,JSP等临时类,是存活不久的,所以需要来不断回收

​