ClassLoader

类加载机制[1]

Java 默认提供的三个 ClassLoader

BootStrap ClassLoader

称为启动类加载器,是 Java 类加载层次中最顶层的类加载器,负责加载JDK中的核心类库,如:rt.jar, resources.jar, charsets.jar 等

Extension ClassLoader

称为扩展类加载器,负责加载Java的扩展类库,默认加载 JAVA_HOME/jre/lib/ext 目录下的所有 jar

App ClassLoader

称为系统类加载器,负责加载应用程序 classpath 目录下的所有 jar 和 class 文件

如果你需要从其他路径,比如网络上加载类的时候就需要实现自己的类加载器。类加载器的作用就是告诉虚拟机去哪里加载所需要的类。用了委派的设计模式。即便用自定义类去加载所类。它是向自己的上一级询问这个类有没有加载,逐级向上。如果都没有加载。再由上到下尝试去加载。如下图:

classLoader

内存泄漏[2]

每个对象,都有一个对它的类的引用,object.getClass()
每个类对象,都有一个对它的 classLoader 的引用,object.getClass().getClassLoader()

同样的每个 classLoader 对它加载的类对象都有一个引用。如果某个对象发生了内存泄漏,则它的类对象也不能被回收,加载类对象的 classLoader 也就不能被回收,根据垃圾回收的规则,该 classLoader 加载的类对象都不能被回收。


  1. http://blog.csdn.net/xyang81/article/details/7292380 ↩

  2. http://zeroturnaround.com/rebellabs/rjc201/ ↩

你可能感兴趣的:(ClassLoader)