【面试题】面试官必问:掌握Java类加载过程及其流程
题目:
面试题:说一下Java的类加载过程?
回答话术:
Java类加载过程主要分为三个步骤,加载、链接和初始化。
1、加载就是将字节码数据从不同的数据源读取到JVM中,并且映射为JVM认可的数据结构。
2、链接阶段是类加载过程的一个核心步骤,是把原始的类定义信息平滑的转化到JVM运行过程中,链接里的通过验证核验字节信息是否符合规范,通过准备创建类或接口中的静态变量并且分配所需要的内存空间,通过解析将常量池中的符号引用替换为直接引用。
3、初始化阶段才是真正执行类初始化的逻辑,包括静态字段的赋值,还有执行类定义中静态初始化块内的逻辑。这里就说到了我们常常说的双亲委派模型了,双亲委派模型的就是当类加载器加载某个类的时候,除非父加载器找不到相应类型,否则尽量将这个任务代理给当前加载器的父加载器去做,这样做的好处就是避免类重复加载。不过双亲委派也有一个需要注意的点就是,如果两个类是邻居级别的,那么同一类型仍然可以被加载多次,原因就是类加载器的可见性,它是子加载器可以见到父加载器的类型,但是父加载器不可以看见子加载器的类型。
4、这里就还要再说一下常见的类加载器了,JDK中的本地方法类一般由启动类加载器装载,JDK 中内部实现的扩展类一般由扩展类加载器实现装载,而程序中的类文件则由应用类加载器实现装载。我们也可以使用自定义类加载器不交给父类来加载类,就破坏了双亲委派机制。
5、常见的打破双亲委派机制的是tomcat,tomcat这么做的原因主要是tomcat想要部署多个应用,若多个应用中具有同名类(包结构也一致),但实现方式不同,只加载一份会导致异常,因此需要打破双亲委派机制。
视频地址:
https://www.bilibili.com/video/BV1sU4y1C7yZ/
文档地址:
https://www.processon.com/view/link/62e7e650079129079136c32b
本文来自博客园,作者:Micky233,转载请注明原文链接:https://www.cnblogs.com/geek233/p/17372185.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步