`
scholers
  • 浏览: 621730 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ClassLoader载入层次

阅读更多
Class.forName(classname)默认是用调用 ClassLoader.getCallerClassLoader()这个方法来获得调用者类的加载器,而调用者的类加载器再利用classLoader的委托模型去加载。其实每次new一个类的时候,也是通过 ClassLoader.getCallerClassLoader()去获得调用者类的加载器来加载的。
  Java中的类加载器可以分为四类:
  
  1 Bootstrp loader
  Bootstrp加载器是用C++语言写的,它是在Java虚拟机启动后初始化的,它主要负责加载%JAVA_HOME%/jre/lib以及%JAVA_HOME%/jre/classes中的类,并且它也会加载ExtclassLoader类。
  
  2 ExtClassLoader
  Bootstrp loader加载ExtClassLoader,并且将ExtClassLoader的父加载器设置为Bootstrp loader.当时因为bootstrp loader不是JAVA写的,所以占在JAVA的角度来看,调用Extclassloader的getParent()返回的是null.ExtClassLoader主要加载%JAVA_HOME%/jre/lib/ext中的jar文档,以及此路径下的所有classes目录。
  
  3 AppClassLoader
  Bootstrp loader加载完ExtClassLoader后,就会加载AppClassLoader,并且将AppClassLoader的父加载器指定为ExtClassLoader。AppClassLoader主要负责加载classpath所指定的位置的类或者是jar文档。
  
  4 URLClassLoader
  URLClassLoader是我们可以自定义的加载器,我们可以通过指定一个URL对象来创建此加载器,它所加载路径就是URL所代表的逻辑位置。并且它的父加载器是AppClassLoader。
  
  有了这个加载器的继承体系以后,就可以清楚的知道委托模型是怎么实现的了,当一个加载器要加载一个类的时候,首先请求父加载器来加载,父加载器再请求父加载器来加载,依此类推,如果所有的父加载器都不能加载,那么才有自己加载,如果也不能加载,则出现NoClassDefFoundError错误.所以打包的时候,其实是将自己的类放在规定的地方,让框架已经实现的类加载器来加载,这样以来,就可以让框架来管理自己些的类的生命周期。在一般的情况下,我们自己写的类,默认都是由AppclassLoader来载入的,只要class的全名不和AppclassLoader的父加载器已经加载的类相同就OK。
分享到:
评论
1 楼 limoo70 2013-06-27  
出于好奇   第一个classloader的名字是不是少了个a啊  亲   看到我的回复就修改一下吧  

相关推荐

    java classloader

    ClassLoader分为三个主要层次:Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader(也称为System ClassLoader)。Bootstrap ClassLoader是JVM启动时的第一个ClassLoader,负责加载JRE的`<JAVA_HOME>/...

    深入类别载入器快速下载

    1. 类别载入器的层次结构:Java类别载入器通常由Bootstrap ClassLoader(引导类加载器)、Extension ClassLoader(扩展类加载器)和AppClass ClassLoader(应用程序类加载器)组成,形成一个树状的父子关系。...

    Java技术----实现JAVA的动态类载入机制

    Java虚拟机(JVM)有多个内置的类加载器,如Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader,它们按层次结构工作,依次加载类。用户还可以自定义类加载器以满足特定需求,例如加载网络上的类或加密...

    JVM加载class文件的原理机制

    值得注意的是,JVM的类装载器并不是一个,而是三个,层次结构如下: * Bootstrap Loader:负责加载系统类 * ExtClassLoader:负责加载扩展类 * AppClassLoader:负责加载应用类 类加载器之间的协调工作 Java中有...

    java深度历险 详细讲解了java的package机制等

    默认的类加载器层次结构由Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader组成。开发者还可以自定义类加载器,以实现特定的加载逻辑,如从网络或数据库加载类。 总之,`package`和`import`机制为...

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

    JVM中的类加载器并不是一个,而是三个,层次结构如下:Bootstrap Loader、ExtClassLoader和AppClassLoader。Bootstrap Loader负责加载系统类,ExtClassLoader负责加载扩展类,AppClassLoader负责加载应用类。 类...

    jvm理解pdf

    10. **类加载器**:JVM提供不同的类加载器,如Bootstrap ClassLoader、Extension ClassLoader和AppClassloader,以及用户自定义类加载器。了解它们的层次关系和工作原理对理解和解决类冲突有帮助。 以上只是JVM理解...

Global site tag (gtag.js) - Google Analytics