ClassLoader相关内容

 

一、什么叫作bootstrap?做为形容词有依靠本身力量的;本身作的等意思,在咱们计算机世界里,通常指的是自举,引导,引导程序。java

那什么是bootstrapClassLoader呢?它是引导加载器,也是最原始的加载器,它是干什么 事情的呢?它负责加载整个java的核心类。编程

它的父类是什么?它是没有父类的,是由jvm建立的bootstrap

 

Java提供了动态的装载特性;它会在运行时的第一次引用到一个class的时候对它进行装载和连接,而不是在编译期进行。JVM的类装载器负责动态装载。Java类装载器有以下几个特色: jvm

 

public static void main(String[] args) {
    java.net.URL[] urls=sun.misc.Launcher.getBootstrapClassPath().getURLs(); 
    for (int i = 0; i < urls.length; i++) { 
     System.out.println(urls[i]); 
}
url

file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/lib/resources.jar
file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/lib/rt.jar
file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/lib/sunrsasign.jar
file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/lib/jsse.jar
file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/lib/jce.jar
file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/lib/charsets.jar
file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/lib/modules/jdk.boot.jar
file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/classes
.net

 

二、什么是extensionClassLoader扩展类加载器 对象

System.out.println(System.getProperty("java.ext.dirs")); 
      ClassLoader extensionClassloader=ClassLoader.getSystemClassLoader().getParent(); 
    System.out.println("the parent of extension classloader : "+extensionClassloader.getParent());  ssl

D:\Program Files\Java\jdk1.6.0_23\jre\lib\ext;C:\Windows\Sun\Java\lib\ext
the parent of extension classloader : nullget

实际上他才是java里边的原始类加载器,它是由bootstrapClassLoader加载的,可是他的父类不是bootStrapClassLoader,由于booStrapClassLoader不是一个java对象。。。虚拟机

三、什么是systemClassLoader呢?

若是说bootstrap class loader和extension class loader负责加载的是JVM的组件,那么system class loader负责加载的是应用程序类。它负责加载用户在$CLASSPATH里指定的类。

 

 

每一个类装载器都有一个本身的命名空间用来保存已装载的类。当一个类装载器装载一个类时,它会经过保存在命名空间里的类全局限定名(Fully Qualified Class Name)进行搜索来检测这个类是否已经被加载了。若是两个类的全局限定名是同样的,可是若是命名空间不同的话,那么它们仍是不一样的类。不一样的命名空间表示class被不一样的类装载器装载。

 

顾名思义,类装载器是用来把类(class)装载进JVM的。JVM规范定义了两种类型的类装载器:启动类装载器(bootstrap)和用户自定义装载器(user-defined class loader)。 bootstrap是JVM自带的类装载器,用来装载核心类库,如java.lang.*等。如java.lang.Object是由bootstrap装载的。

Java提供了抽象类ClassLoader,全部用户自定义类装载器都实例化自ClassLoader的子类。 System Class Loader是一个特殊的用户自定义类装载器,由JVM的实现者提供,在编程者不特别指定装载器的状况下默认装载用户类。系统类装载器能够经过ClassLoader.getSystemClassLoader() 方法获得。每一个类装载器都有本身的命名空间,其中维护着由它装载的类型。因此一个Java程序能够屡次装载具备同一个全限定名的多个类型。这样一个类型的全限定名就不足以肯定在一个Java程序能够屡次装载具备同一个全限定名的多个类型。所以,当多个类装载器都装载了同名的类型时,为了惟一地标识该类型,还要在类型名称前面加上一个装载该类型(指出了他所位于的命名空间)的类装载器的标识。java虚拟机中的命名空间,实际上是解析过程的结果。对于每一个被装载的类型,Java虚拟机都会记录装载它的类装载器,当虚拟机解析一个类到另外一个类的符号引用时,他须要被引用类的类装载器。

相关文章
相关标签/搜索