JVM加载class文件的原理机制?

1.JVM加载class文件的原理机制?

JVM即Java Virtual Machine ,Java 虚拟机。Java中的所有类都必须装载到JVM中才能运行,java中类的装载由JVM的类加载器完成,类加载器的实际工作就是将class文件从硬盘读取到内存中。

Java中的类大致可以分为三种:

1)系统类

2)扩展类

3)由程序员自定义的类

 

而类的加载器也分为三种,即BootstrapLoader、ExtClassLoader、AppClassLoader。类加载器本质上也是类,它们的功能就是将类加载到JVM中。他们的结构如下:

Bootstrap Loader  - 负责加载系统类 

            | 

          - - ExtClassLoader  - 负责加载扩展类 

                          | 

                      - - AppClassLoader  - 负责加载应用类 

而类加载器的工作原理是什么哪?类加载器的工作原理基于三个机制:委托、可见性和单一性。

 

委托机制

当一个类加载和初始化的时候,类仅在有需要加载的时候被加载。假设你有一个应用需要的类叫作Abc.class,首先加载这个类的请求由 Application类加载器委托给它的父类加载器Extension类加载器,然后再委托给Bootstrap类加载器。Bootstrap类加载器 会先看看rt.jar中有没有这个类,因为并没有这个类,所以这个请求由回到Extension类加载器,它会查看jre/lib/ext目录下有没有这 个类,如果这个类被Extension类加载器找到了,那么它将被加载,而Application类加载器不会加载这个类;而如果这个类没有被 Extension类加载器找到,那么再由Application类加载器从classpath中寻找。记住classpath定义的是类文件的加载目 录,而PATH是定义的是可执行程序如javac,java等的执行路径。

 

可见性机制

可见性的原理是子类的加载器可以看见所有的父类加载器加载的类,而父类加载器看不到子类加载器加载的类。

 

单一性机制

即父加载器加载过的类不能被子加载器再次加载。

 

2.JVM的类加载过程

JVM将类加载过程分为三个步骤:装载(Load)、链接(Link)、和初始化(Initialize)。

而其中链接又分为三个步骤:验证、准备和解析

1)装载:查找并加载类的二进制数据。

2)链接

验证:确保被加载类的正确性。

准备:为类的静态变量分配内存,并赋予其默认值。

解析:把类中的符号引用转换为直接引用。

3)初始化:为类的静态变量赋予正确的初始值。

 

3.类什么时候才被初始化

1)创建类的实例,即new一个对象。

2)访问类的静态域

3)反射(Class.forName("com.study.Test"))

4) 初始化一个类的子类(会首先初始化子类的父类)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值