看了 IBM developerWorks 上的“深入探讨 Java 类加载器 ”后小结下:
- 系统提供的 Classloader 主要有三种:Bootstrap Classloader、Extensions Classloader 和 System Classloader。Bootstrap Classloader 用来加载 Java 核心类库;Extensions Classloader 用来加载 Java 的扩展类库;System Classloader 会根据 Java 的 Classpath 来加载 Java 类。一般来说 Java 应用的类都是有它来加载的。除了 Bootstrap Classloader 以外,所有的 Classloader 都有一个父 Classloader。
- Java 虚拟机判断 Class 是否相同时,不仅要看类全名是否相同,还要看 Classloader 是否相同。这种机制使得不同类加载器加载的类可以相互隔离。
- Classloader 加载类的顺序:System Classloader 会将类交给父 Classloader 去加载,一直类推。但是 Web 容器中的 Classloader 的加载顺序与这个是相反的。这样可以保证 Web 应用中的类的优先级高于容器提供的类。