一.jvm类加载概念
类加载是负责加载类的,如果传入的类名是一个二进制的形式的类名,那么类加载器会自动试图查找或生成类定义数据
类加载器工作的阶段在:将二进制的Java字节码文件转换为一个对象的时候,即在new一个对象的时候,才会用到类加载器
类加载器分为系统提供的加载器和开发人员自定义的加载器
系统提供的加载器又可分为:1.bootstrap class loader(引导类加载器):用来加载java核心类库,是用原生代码生成,并不继承与java.lang.ClassLoader
2.extensions class loader(扩展类加载器):用来加载java扩展类库,
3.system class loader(系统类加载器):根据java类路径(CLASSPATH)来加载java类
根据类加载器的分类,会形成一棵类加载器继承的树,根类是bootstrap class load,extensions class load继承自bootstrap class load,system class load继承extensions class load,用户自定义的类加载器一般是继承自system class load。
二.类加载过程
自定义类加载器先查找自己是否已经加载了需要创建的类,如果没有则将此类的加载委托给其父类system classloader,system classloader检查自己是否加载了此类,如果没有加载则同样委托给他的父类extensions classloader,同样的extends classloader检查是否加载了此类,如果同样没有则再次委托给bootstrap classloader,如果bootstrap classloader也没有加载此类则返回null给extensions classloader,extensions classloader开始查找此类,没有找到则抛出CLASSNOTFOUND异常,返回到system classloader,同样的system classloader开始查找此类,同样如果没有找到则抛出同样的异常,并返回到自定义加载器,自定义加载器开始查找此类,如果也没有找到,则抛出CLASSNOTFOUND异常,也就是我们经常出现的类找不到异常。
三.jvm类加载原理
四.jvm类加载应用
五.jvm类加载总结