对JVM类加载机制的理解

  1. mian()方法 ,mian()方法是java程序入口,JVM会首先加载main()方法所在的类A;
  2. 当JVM加载这个类A.class的时候,会采用双亲委托机制,即最下层的加载器类(系统类加载器)会先让其父加载器类(扩展类加载器)尝试加载,然后父加载器类(扩展类加载器)会继续先让他的父加载器类(引导类加载器)尝试加载。因为引导类加载器是没有父类的,所以引导类加载器就会开始加载。加载成功那么这个A.class就加载成功了,加载不成功的话就让子加载器(扩展类加载器)加载;
    上面的意思说的通俗一点就是:三个加载器指的是三个不同的搜索路径。JVM需要加载A.class这个类的时候,会先从引导类加载器规定的目录下搜索,看能不能找到A.class,没有找到的话,会继续在扩展类加载器规定的目录下搜索,看能不能找到A.class,没有找到的话,接着继续在系统类加载器规定的目录下搜索。
    至于这三个加载器分别对应的目录是什么,可以调用方法查找一下。
    双亲委托机制的目的:如果一个引导类加载器规定的目录下有A.class,系统类加载器规定的目录下也有A.class。此时,JVM就会加载引导类加载器规定的目录下的A.class,而不会加载另一个。
  3. 当某一加载器找到A.claas的时候,就把A.class加载进入内存;
  4. (1)验证A.class是否符合字节码文件规范;(2)然后对A.class中的静态变量赋初值(0,null),执行静态代码块;(3)解析;
  5. 初始化,即执行赋值语句,此时注意,如果有父类,先对父类执行初始化。
    初始化应该只有在对一个类进行主动引用的时候才会初始化,意思就是,打算用A.class就初始化,不用A.class,就不用初始化,哪怕这个类已经被加载入内存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值