`

Java中各类ClassLoader加载时资源搜索路径

    博客分类:
  • Java
 
阅读更多
关于Java如何加载类,可以参考下面这篇文章:
http://www.ibm.com/developerworks/cn/java/j-lo-classloader/

这里我们来了解下,各类ClassLoader是从哪些地方去寻找class类文件进行加载的?

JVM是通过一个称为ClassLoader东西来加载Class文件的,每当JVM启动,它就会生成三个ClassLoader,它们分别是Bootstrap Loader, ExtClassLoader 和AppClassLoader。

这三个ClassLoader作用是不同的,它们所加载的class文件也是不同的。
  • Bootstrap Loader是用C++语言实现的,它所加载的是JVM中最底层的类,它加载时的搜索路径是由sun.boot.class.path所指定的。
  • System.out.println(System.getProperty("sun.boot.class.path"));
    

    输出结果如下:
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\resources.jar;
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\rt.jar;
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\sunrsasign.jar;
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\jsse.jar;
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\jce.jar;
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\charsets.jar;
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\modules\jdk.boot.jar;
    E:\Program Files\Java\jdk1.6.0_31\jre\classes

  • ExtClassLoader是用来加载java的一些库的,它加载时的搜索路径是由java.ext.dirs来决定的,该加载器在加载时不同于其他加载器,它加载时会搜索指定路径下的所有子目录,也就是说它会搜索java.ext.dirs所指定下的所有子目录下的class文件或jar文件。同时也可以用参数-Djava.ext.dirs来改变它的搜索路径。
  • System.out.println(System.getProperty("java.ext.dirs"));
    

    输出结果如下:
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\ext;
    C:\Windows\Sun\Java\lib\ext

  • AppClassLoader也称System ClassLoader, 它的搜索路径是由java.class.path来指定的,而且要注意AppClassLoader不会搜索java.class.path下的子目录的。
  • System.out.println(System.getProperty("java.class.path"));
    

    输出结果如下:
    D:\workspace_dbm\study\bin;
    D:\workspace_dbm\study\lib\common-sdl-1.1.1-TAG20120213-SNAPSHOT.jar;
    D:\workspace_dbm\study\lib\commons-logging-1.1.1.jar;
    D:\workspace_dbm\study\lib\commons-lang-2.6.jar;
    D:\workspace_dbm\study\lib\tools.jar


    ExtClassLoader 和AppClassLoader在JVM中只会存在一个实例,一旦运行了是无法改变它们的搜索路径的,也就是无法在程序中通过调用System.setProperty()来改变java.class.path或java.ext.dirs来改变它们的搜索路径的。
    分享到:
    评论

    相关推荐

      java classloader classpath 张孝祥

      类加载器(`ClassLoader`)是Java运行时环境的一部分,它的主要职责是从文件系统或网络中获取字节码,将其转换为`Class`对象,并在Java虚拟机中运行。Java中的类加载机制遵循“按需加载”原则,即只有当程序真正需要...

      Java ClassLoader定制实例

      接着,Extension ClassLoader加载扩展类库,然后是App ClassLoader加载应用程序的类路径下的类。每个ClassLoader都有其父ClassLoader,它们形成了一个层次结构,子ClassLoader可以委托父ClassLoader去加载类,避免了...

      java中classLoader的使用

      Java中的类加载器(ClassLoader)是Java虚拟机(JVM)的一个重要组成部分,它负责将类的.class文件从文件系统或者网络中加载到内存中,并转换为对应的Class对象。类加载器的工作流程主要包括加载、验证、准备、解析...

      JAVA ClassLoader 讲解 (类加载器)

      2. **扩展类加载器(Extension ClassLoader)**:它负责加载位于`-Djava.ext.dirs`系统属性所指定目录中的jar文件。 3. **应用程序类加载器(Application ClassLoader)**:也称为系统类加载器,它负责加载用户类...

      java应用程序类加载器,ClassLoader for java Application

      Java应用程序类加载器是Java平台的核心组成部分之一,它负责加载应用程序中的类到JVM(Java虚拟机)中,使得程序能够执行。理解类加载器的工作原理对于深入学习Java编程至关重要。在Java中,类加载器按照层次结构...

      ClassLoader类加载器

      在Java编程语言中,ClassLoader是一个至关重要的组成部分,它负责加载类到JVM(Java虚拟机)中。了解和掌握ClassLoader的工作原理以及如何自定义ClassLoader对于深入理解Java应用程序的运行机制非常有帮助。以下是对...

      深入Java虚拟机_ClassLoader

      《深入Java虚拟机_ClassLoader》是一本专注于Java虚拟机(JVM)中ClassLoader部分的专著,旨在帮助读者深入理解Java程序如何加载、链接和初始化类。ClassLoader是Java平台核心特性的一部分,它负责查找和加载类到JVM...

      classloader类加载器_基于java类的加载方式详解

      扩展类加载器是一个Java类,它在运行时被Bootstrap ClassLoader加载,并且它同样会加载扩展API中的类。 3. Application ClassLoader(应用程序类加载器):也被称为System ClassLoader(系统类加载器),它负责加载...

      java ClassLoader机制及其在OSGi中的应用

      Java ClassLoader机制是Java虚拟机(JVM)中一个至关重要的组成部分,它的主要任务是将类的.class文件加载到JVM中,使得程序能够运行。ClassLoader不仅负责类的加载,还涉及类的验证、初始化等一系列过程。理解...

      java自定义类加载classloader文档,包括代码

      通过类加载器(Class Loader),Java程序能够在运行时根据需要加载所需的类,从而实现高度的灵活性与可扩展性。本文将深入探讨Java中的类加载机制,并通过一个具体的自定义类加载器的例子来帮助理解其工作原理。 ##...

      Java ClassLoader Tutorial.zip

      Bootstrap ClassLoader加载JDK核心类库,Extension ClassLoader加载扩展类库,而AppClassLoader则加载应用类路径上的类。 3. 双亲委派模型:Java的类加载机制遵循双亲委派模型,即当一个类加载器接收到加载类的请求...

      Java ClassLoader原理

      这一机制为Java平台提供了强大的能力,允许在运行时安装软件组件,例如从网络下载Applet并加载到Web浏览器中。尽管其他系统也支持某种形式的动态加载和链接,但Java平台是唯一一个同时具备以下四个关键特性的系统: ...

      理解Java ClassLoader机制

      最后,App ClassLoader加载的是应用类路径(ClassPath)中的类。 ClassLoader的工作流程主要包含以下步骤: 1. **查找类**:当JVM需要加载一个类时,ClassLoader会根据类名(全限定名,如`java.lang.String`)在...

      Java SE: ClassLoader in depth

      Java ClassLoader是Java运行时环境中用于动态加载Java类到JVM(Java虚拟机)的一个组件。深入理解ClassLoader是深入理解Java动态加载机制、自定义类加载器以及对类的热部署等高级特性的重要基础。 在Java中,...

      Java 类加载机制 ClassLoader Class.forName.pdf

      3. **Application ClassLoader** 的搜索路径由`System.getProperty("java.class.path")`指定,包含了应用程序类的路径。 #### 四、类加载器的特点与获取 ##### 4.1 特点 1. **类加载委托机制**: 每个类加载器在...

      Java类加载器(ClassLoader)1

      Java类加载器分为三种主要类型:引导类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader,也称为系统类加载器)。它们共同工作,确保了Java...

      java 静态代码块通过类加载器获取资源文件例子

      Java支持多种类加载器,包括启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader)。当类首次被引用时,对应的类加载器会查找并加载该类的...

      ClassLoader

      在Java编程语言中,`ClassLoader`是一个非常重要的组件,它负责加载程序运行所需的类文件到Java虚拟机(JVM)中。`ClassLoader`不仅管理着类的加载过程,而且其设计模式还对Java的安全性和性能有着至关重要的影响。 #...

    Global site tag (gtag.js) - Google Analytics