ClassLoader

  • 类加载器分类

    java是通过类加载器,将jdk中的类,classpath下的类,或者网络上下载下来的class文件夹在到内存中去。 类加载器分几种,最顶层的是Bootstrap ClassLoader,负责加载rt.jar包中的类,其子类是ExtensionClassLoader,负责加载jdk的ext包中的所有类,ExtensionClassLoader的子类是SystemClassLoader,这个类加载器负责加载classpath下面的class文件,也就是我们自己写的类和导入的jar包。classpath告诉jvm需要在那个文件夹下面查找class文件,一个web项目的classpath是编译后的class文件所在的路径,是需要设置的。上面的类加载器都是系统帮我们实现的,但是对于一个特殊的需求并不能满足,比如那些class文件不在jdk的lib中,也不在classpath下面,tomcat就有自己的类加载器负责加载tomcat里面的class文件。

  • 双亲加载机制

    类加载器实行的是双亲加载机制,当某个具体的类加载器要加载某个类时,会委托父类加载,以此递推,一直到到bootstrap为止。可以简单的理解加载类的时候会先从最顶级的bootstrap中加载,如果未找到,那么会在其子类中寻找,一直到调用的那个具体的类加载器。这样做的好处是防止jdk中的类被覆盖,比如,用户自己定义了一个权限定名为java.lang.String的类,那么在使用类加载器中加载的时候,因为rt.jar中存在了这个类,会直接返回,所以用户定义的就不会被加载进内存中。

你可能感兴趣的:(java)