您的位置:首页 > 编程语言 > Java开发

JAVA学习之JVM加载class

2012-03-19 21:44 441 查看
1.java中的所有类,必须被装载到JVM中才能运行,这个装载工作是由JVM中的类加载器完成的,类加载器所做的工作实质是就是将类加载到JVM中。

2.java中部高的类大致分为三种:

1)系统类

2)扩展类

3)由程序员自定义的类

3.类装载方式分为两种:

1)隐式装载:程序在运行过程中当遇到通过new()等方式生成对象时,隐式调用类加载器加载对应的类到JVM中;

2)显式装载:通过class.forname()等方法,显式加载需要的类;

4.java类加载器:三层结构

Bootstrap Loader--负责加载系统类

|

--ExtClassLoader--负责加载扩展类

|

--AppClassLoader--负责加载应用类

在这里java采用了委托模型机制,这个机制简单来讲,就是“类装载器有载入类的需求时,会先请示其Parent使用其搜索路径帮忙载入,如果Parent 找不到,那么才由自己依照自己的搜索路径搜索类”。

Public class Test{
Public static void main(String[] arg){
ClassLoader c  = Test.class.getClassLoader();  //获取Test类的类加载器
System.out.println(c);

ClassLoader c1 = c.getParent();  //获取c这个类加载器的父类加载器
System.out.println(c1);

ClassLoader c2 = c1.getParent();//获取c1这个类加载器的父类加载器
System.out.println(c2);
}
}

运行结果:

AppClassLoader

ExtClassLoader

Null

由于Bootstrap Loader是用C++语言写的,依java的观点来看,逻辑上并不存在Bootstrap Loader的类实体,所以在java程序代码里试图打印出其内容时,我们就会看到输出为null。

5.JVM加载class文件的原理机制:

1)装载:查找和导入Class文件

2)链接:检查文件是否正确,给变量分配空间,将符号引用转成直接引用;

3)初始化:对静态变量,静态代码块执行初始化工作;

类装载器ClassLoader是一个抽象类,类装载工作由ClassLoader和其子类负责,会产生三个ClassLoader:根装载器。ExtClassLoader、AppClassLoader;其中,根目录不是ClassLoader的子类,负责装载JRE的核心类库;ExtClassLoader是ClassLoader的子类,负责装载JRE扩展目录ext下得jar类包;AppClassLoader是ExtClassLoader的子类,负责装载classpath路径下得类包。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: