JVM基础03-类加载机制

1. 什么是类加载机制
就是把class文件加载到内存,并对数据进行校验、解析和初始化,形成JVM能直接使用的类型:Java.lang.class

2. 图示


3. 分步描述
1)装载
        step1:通过类的全限定名获取加载此类的二进制字节流
        step2:将字节流中的静态存储结构转化为方法区的运行时数据结构(类信息、常量、静态变量、即时编译器编译后的代码)
        step3:在Java堆中生成Java.lang.class对象,封装了方法区中的数据结构,作为对方法区的数据的访问入口     

2)校验
        校验主要时为了保证类加载的正确性,主要是对文件格式、元数据、字节码、引用符号进行校验,简单来说就是对前面步骤所产生的数据的校验。

3)准备
        给类的静态变量分配内存并初始化为默认值。

4)解析
        将类的符号引用转化为直接引用。
        符号引用:用符号来描述一个目标,可以是任何字面量,存在于常量池中
        直接引用:直接指向目标的地址、相对偏移量或间接定位到一个目标的句柄
        相对偏移量:存储单元的实际地址相对于某个参考地址的距离
        解析阶段主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用限定符7类符号引用进行。
        
5)初始化
        对静态变量、静态代码块进行初始化操作,赋予真实的值

4. 类是怎么加载的呢?类加载器(ClassLoader)
        我们从JVM的类加载机制中可以看到,第一步是装载阶段,也就是将.class文件加载到内存中。那么JVM是怎么加载class文件的呢。
答案就是我们的类加载器了。
4.1 类加载器有哪些
        BootStrapClassLoader,ExtensionClassLoader,ApplicationClassLoader,customclassloader。他们的权限关系是:B>E>A>C。四种加载器的对应职能由下图表示:

                                                                (说明:图片来自某大神的总结)
4.2 加载原则:双亲委派机制        
        总结来说就是:权限优先级越高加载的类信息越是核心业务类。当优先级低的加载器加载类时会先询问高级类加载器,如果高级类加载器加载不了就交由下一层加载器,像这样层层递推。可以查看ClassLoader.java这个类了解类加载的机制。
1)逐层检查一个类是否已被加载,如已被加载则不加载
2)自顶向下,由上层到底层尝试加载,如上一层加载不了就交由下一层尝试加载。

4.3 破环双亲委派机制
1)Tomcat
2)SPI机制
3)OSGI
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值