这个面试题来自一位群友的面试题分享

今天我们就来盘一盘这个面试题,不过在说双亲委派模型之前,我们得先简单了解下类加载。
类加载
我们平常写的代码是保存在一个 .java文件里面,经过编译会生成.class文件,这个文件存储的就是字节码,如果要用上我们的代码,那就必须把它加载到 JVM 中。

当然,加载到 JVM 生成 class 对象的来源不一定得是.class文件,也可以来自网络等等,反正只要是符合 JVM 规范的都行。
而类加载的步骤主要分为:加载、链接、初始化。
加载
其实就是找到字节流,然后将其加载到 JVM 中,生成类对象。这个阶段就是类加载器派上用场的阶段,等下我们再细说。
链接
这个阶段是要让生成的类对象融入到 JVM 中,分别要经历以下三个步骤:

验证就是检验一下加载的类是否满足 JVM 的约束条件,也就是判断是否合规。
准备就是为加载类的静态变量申请内存空间,并赋予初始值,例如是 int 类型那初始值就是 0。
解析就是将符号引用解析成为实际引用,讲人话就是:例如 Yes 类里面引用了一个 XX 类,那一开始 Yes 类肯定不知道 XX 类在内存里面的地址,所以就先搞个符号引用替代一下,假装知道,等类加载解析的时候再找到 XX 类真正地址,做一个实际引用。
这就是解析

本文详细介绍了Java的类加载过程,包括加载、链接、初始化。重点讨论了双亲委派模型,解释了其作用和为什么需要这一模型。接着,文章揭示了双亲委派模型在JDK1.2之前、JNDI/JDBC、OSGI热部署以及JDK9模块系统中的四次破坏,分析了每次破坏的原因和解决方案。
最低0.47元/天 解锁文章
1721

被折叠的 条评论
为什么被折叠?



