java 类装载器
jvm 主要包含三部分 : 1.类装载器 2.类效验器 3.类解释器
类装载器 :
1.启动类装载器(Bootstrap Loader:C编写的):用特定于本地操作系统的代码来实现,属于java虚拟机的内核,用于jvm启动时装载java基础类
库(即rt.jar文件中的类).
2.标准扩展类(载器(Extended Loader:java编写的):负责装载存放载<JAVA_HOME>/jre/lib/ext目录下的jar包中的类
3.类路径装载器(AppClassLoader:java编写的):负责加载应用程序的启动执行类
当我们的某个类MyClass.class请求加载时,JVM会看 启动类装载器,标准扩展类装载器 这2个加载器有没有加载这个类,如果加载了就放弃当前
的这个类加载器,由于之前没有使用启动类装载器,标准扩展类装载器加载这个类,所有JVM还会用类路径装载器加载.
/*测试你所使用的 JVM 的 ClassLoader */
public class LoaderSample
{
public static void main(String[] args) {
Class c;
ClassLoader cl;
cl = ClassLoader.getSystemClassLoader();
System.out.println(cl);
while (cl != null) {
cl = cl.getParent();
System.out.println(cl);
}
try {
c = Class.forName(“java.lang.Object”);
cl = c.getClassLoader();
System.out.println(“java.lang.Object’s loader is ” + cl);
c = Class.forName(“LoaderSample”);
cl = c.getClassLoader();
System.out.println(“LoaderSample’s loader is ” + cl);
}
catch (Exception e)
{
e.printStackTrace();
}
}
输出结果:
第一行表示,系统类装载器实例化自类 sun.misc.Launcher$AppClassLoader
第二行表示,系统类装载器的 parent 实例化自类 sun.misc.Launcher$ExtClassLoader
第三行表示,系统类装载器 parent 的 parent 为 bootstrap
第四行表示,核心类 java.lang.Object 是由 bootstrap 装载的
第五行表示,用户类 LoaderSample 是由系统类装载器装载的
-------------------------------------------------------------------------------------------------
相关:
1.对于每一个要使用的类首要的任务就是将类的字节码数据装载进来,载入内存中对应一个 java.lang.Class实例.
2. 面向对象中任何事物都可以用一个类来描述,现在我们用一个类去描述另一个类,这个类就是java.lang.Class,我们由三种方法可以获取这
个对象,1.类名,class 2.对象.getClass() 3.Class,forName(类名)