主题
面试速答(先看这里)
**一句话结论:**大的阶段可以分为类的加载、类的使用、以及类的卸载。
60秒标准回答:
一个类从诞生到卸载,大体分为如下几步
大的阶段可以分为类的加载、类的使用、以及类的卸载
其中类的加载阶段又分为加载、链接、初始化。其中连接过程又包含了验证、准备和解析
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**一个类从诞生到卸载,大体分为如下几步:
- **要点2:**其中类的加载阶段又分为加载、链接、初始化。
- **要点3:**类的使用,即是类在加载完毕后,会有代码段来引用该类,如初始化该类的对象,或者通过反射获取该类的元数据。
- **要点4:**这个时候,我们需要明白一个问题,我们知道,JVM自带的类加载器因为需要一直加载基础对象,所以JDK自带的基础类是一定不会被回收掉的,那么会有哪些类会被回收掉呢?
- **要点5:**答案就是那些自定义类加载器一些场景的类会被回收掉,如tomcat,SPI,JSP等临时类,是存活不久的,所以需要来不断回收
**记忆锚点:**ClassLoader → 如初始化该类的对象 → 案就是那些自定义类 → 加载器一些场景的类 → 或者通过反射 → FULLGC
加分表达:
- 答案就是那些自定义类加载器一些场景的类会被回收掉,如tomcat,SPI,JSP等临时类,是存活不久的,所以需要来不断回收
追问准备:
- 围绕「ClassLoader」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「如初始化该类的对象」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「案就是那些自定义类」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
一个类从诞生到卸载,大体分为如下几步:

大的阶段可以分为类的加载、类的使用、以及类的卸载。
其中类的加载阶段又分为加载、链接、初始化。其中连接过程又包含了验证、准备和解析。
加载阶段
类使用过程
类的使用,即是类在加载完毕后,会有代码段来引用该类,如初始化该类的对象,或者通过反射获取该类的元数据。
类卸载过程
假如说该类满足下面2个条件:
- 该类所有的实例都已被GC回收。
- 该类的ClassLoader已经被GC回收。
那么该类会在FULLGC期间从方法区被回收掉。
这个时候,我们需要明白一个问题,我们知道,JVM自带的类加载器因为需要一直加载基础对象,所以JDK自带的基础类是一定不会被回收掉的,那么会有哪些类会被回收掉呢?
答案就是那些自定义类加载器一些场景的类会被回收掉,如tomcat,SPI,JSP等临时类,是存活不久的,所以需要来不断回收