image

编辑人: 桃花下浅酌

calendar2025-01-30

message8

visits829

描述 JVM 加载 class 文件的机制?

分析&回答

Java中的所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中。

类装载方式,有两种 :

  1. 隐式装载: 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。
  2. 显式装载: 通过class.forname()等方法,显式加载需要的类。

Java类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证程序运行的基础类(像是基类)完全加载到jvm中,至于其他类,则在需要的时候才加载。这当然就是为了节省内存开销。

当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化

  • 加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。加载完成后,Class对象还不完整,所以此时的类还不可用。
  • 当类被加载后就进入连接阶段,这一阶段包括:
    • 验证:为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。
    • 准备:为静态变量分配内存并设置默认的初始值。
    • 解析:将符号引用替换为直接引用。
  • 最后JVM对类进行初始化
    • 1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;
    • 2)如果类中存在初始化语句,就依次执行这些初始化语句。

类的加载是由类加载器完成的,类加载器包括:启动类加载器(BootStrap)、扩展类加载器(Extension)、应用程序类加载器(Application)。

反思&扩展

重复内容不可怕,没有记住才可怕。


喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

创作类型:
原创

本文链接:描述 JVM 加载 class 文件的机制?

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share