JAVA类加载器

类加载器,说白了就是加载类的 java

  .类加载器负责将.class文件(可能在磁盘上,也可能在网络上)加载到内存中,并为之生成对应的java.lang.Class对象 bootstrap

  .当JVM启动时,会造成由三个类加载器组成的初始类加载器层次结构: 网络

                 BootStrap----------JRE/lib.jar      根节点类加载器 url

                 ExtClassLoader-----------JRE/lib/ext/*.jar       扩展类加载器 spa

                 AppClassLoader-----------CLASSPATH指定的全部jar或目录        应用类加载器也叫系统加载器 操作系统

 

   BootStrap classloader: 引导(也称原始)类加载器,他负责加载java的核心类(也就是JDK自带类) orm

                                          这个加载器是很是特殊的,它实际上不是java.lang.ClassLoader的子类,而是由                                           JVM自身实 现的。能够经过执行一下代码来得到bootstrap classloader 加载了哪些 对象

                                           核心类库: 内存

                                URL[] urls = sun.misc.Launcher. getBootstrapClassPath (). getURLs (); ssl

                                         for ( int i = 0; i < urls.length ; i ++) {

                                                System. out .println ( urls [ i ]. toExternalForm ());

                                          }

 

   extension classloader: 扩展类加载器,它负责加载JRE的扩展目录中的jar包,这为引入除java核心类之外的新功能

                                         提供了一个标准机制。由于默认的扩展目录对全部从同一个JRE中启动的JVM都是通用的所

                                         以,放入这个目录的JAR类包对全部的JVM和system classloader都是可见的。。

 

  (systemm)App classloader: 系统(也称为应用)类加载器,它负责在JVM被启动时,加载来自在命令java中的

                                                   classpath或者java.class.path系统属性或者CLASSPATH操做系统属性所指定

                                                   的JAR类包和类路径

 

  全盘负责委托机制:

           全盘负责:当一个classloader加载一个class的时候,这个classs所依赖的和引用的其余class一般也由这个

                          classloader负责载入。

 

           委托机制: 先让parent(父)类加载器寻找,只有在parent找不到的时候才从本身的类路径中寻找。

 

 类加载器还采用了cache机制:

                   若是cache中保存了这个class就直接反悔它,若是没有才从文件中读取和转换成class,并存入cache,

                   这就是为何修改class可是必须从新启动JVM才能生效,而且类指加载一次的缘由

相关文章
相关标签/搜索