JVM面试常问的类加载器原理

前言


最近面试Java后端开发,被面试官问到一些JVM类加载器问,我们如何巧妙的回答呢?于是我想把它总结下来,分享给大家,也许正好是你需要,如果能够帮助到大家,我会感到高兴,有些地方写得不太好,可以分享你最好的答案在评论区。作为一位Java程序员,我们避免不了要深入理解Java虚拟机的,面试也是常问的问题。

类加载器

class文件只有被加载到JVM中,才能运行和使用的,那么JVM如何加载class文件呢?类加载过程分为三个步骤:装载、连接、初始化。而连接又分为三个步骤:检查、准备、解析。

装载阶段

装载:主要完成的是将对应的class文件导入,将字节流所代表的静态存储结构转换为方法区的运行时的数据结构。

连接阶段

连接:分为检查、准备、解析各个步骤所作的工作如下:

检查:主要是检查class文件加载过来是否正确比如文件格式、元数据、字节码以及符号引用这些。准备:准备阶段也是就是正式为变量分配内存并且设置类变量的初始值的阶段。也就是给类中的静态变量分配内存空间。

解析:这一步是jvm将常量池内的符号引用替换为直接引用的过程,(这步是可选的),解析主要是针对类或者接口以及类的方法、接口方法、方法类型等。 这步也就是得到类或者字段、方法在内存中的指针或者偏移量的。

扫描二维码关注公众号,回复: 11233347 查看本文章

初始化阶段

初始化也是最后一步,是将静态变量和静态代码块执行初始化工作,也就是说真正的执行类中定义的Java程序代码,

初始化注意事项:

在初始化过程中,当nwe一个类时,会读取一个静态字段或者调用一个类的静态方法的。如果使用Java.lang.reflect包的方法对类进行反射调用时,假如类没有初始化,会先需要触发其初始化。当初始化类,如果父类还没初始化,那么先去触发该类的初始化的。

猜你喜欢

转载自blog.csdn.net/realize_dream/article/details/105624982
今日推荐