Java类加载器classLoader的工作机制
来源:互联网 发布:淘宝的购物记录怎么查 编辑:程序博客网 时间:2024/05/06 12:54
类加载器就是寻找类或接口字节码文件进行解析并构造JVM内部对象表示的组件。在Java中,类转载器把一个类装入JVM中,需要经过以下步骤:
1.装载:查找和导入Class文件;
2.链接: 执行校验、准备和解析步骤,其中解析步骤是可以选择的:
a)校验: 检查载入Class文件数据的正确性;
b)准备:给类的静态变量分配存储空间;
c)解析:将符号引用变成直接引用;
3.初始化:对类的静态变量、静态代码块进行初始化工作。
类装载工作是由ClassLoader及其之类负责的,ClassLoader是一个重要的Java运行时系统组件,它负责在运行时查找和装入Class字节文件。JVM在运行时会产生三个ClassLoader:跟装载器、ExtClassLoader(扩展类装载器)和AppClassLoader(系统类装载器)。其中,跟装载器不是ClassLoader的子类,它使用C++编写,因此我们在Java中看不到它,跟装载器负责装载JRE的核心类库,如rt.jar,charsets.jar等。ExtClassLoader和AppClassLoader都是ClassLoader的子类。其中ExtClassLoader负责装载JRE扩展目录ext中的JAR类包;AppClassLoader负责装载ClassPath路径下的类包。
这三个类装载器之间存在父子层级关系,跟装载器是ExtClassLoader的父装载器,ExtClassLoader是AppClassLoader的父装载器。默认情况下,使用AppClassLoader装载应用程序的类,我们可以试验如下:
[java]
package com.uestc.test;
public class ClassLoaderTest {
public static void main(String[] args) {
ClassLoader c=Thread.currentThread()。getContextClassLoader();
System.out.println(c);
System.out.println(c.getParent());
System.out.println(c.getParent()。getParent());
}
}
运行结果如下:
[java]
sun.misc.Launcher$AppClassLoader@1016632
sun.misc.Launcher$ExtClassLoader@dc6a77
null
从上述结果可以分析得出当前的ClassLoader是AppClassloader,父ClassLoader是ExtClassLoader,祖父ClassLoader是根类装载器,因为在Java中无法获得它的句柄,因此返回null.
ClassLoader与Class.forName的区别
classLoader中的函数loadclass用于Class文件的加载但并没有完成初始化工作,而使用Class.forName则完成了初始化工作即完成对类的静态变量、静态代码块执行初始化工作。实例如下:
需要加载的类Reflect.java如下:
[java]
package com.uestc.test;
public class Reflect {
private int userName;
private int password;
static {
System.out.println("Reflect static block");
}
public Reflect(){
System.out.println("Reflect constructs");
}
public int getUserName() {
return userName;
}
public void setUserName(int userName) {
this.userName = userName;
}
public int getPassword() {
return password;
}
public void setPassword(int password) {
this.password = password;
}
}
- Java类加载器classLoader的工作机制
- Java类加载器classLoader的工作机制
- 类加载器CLASSLOADER的工作机制
- java 的类加载机制(classloader)
- java 类的加载(ClassLoader)机制
- Java类的加载机制 ClassLoader
- java 的 ClassLoader 类加载机制详解
- java 虚拟机类装载器(classloader)的工作机制
- Java ClassLoader的工作机制
- Java 类加载器Classloader机制解析
- Java的ClassLoader加载机制
- Java的ClassLoader加载机制
- Java的ClassLoader加载机制
- 类装载器ClassLoader的工作机制
- java ClassLoader工作机制
- java ClassLoader工作机制
- java ClassLoader工作机制
- Java中的类加载器(ClassLoader)及类的加载机制
- Windows下Visual studio 2013 编译 Audacity
- BizTalk开发系列(三) 单机环境下的BizTalk Server 2006 R2安装
- ubuntu环境下以安装包形式安装mysql
- NOIp2016酱油记
- SEAndroid使用
- Java类加载器classLoader的工作机制
- android Application类的详细介绍
- HDFS格式化报错
- memcached+magent实现memcached集群
- QT ini文件读写
- ACM篇:UVa 10474--Where is the Marble?
- 正式入驻
- 百度前端技术学院 JavaScript Task 01
- tomcat里的servlet就是线程相关的问题!