Java类加载器classLoader的工作机制

标签: java 加载器 classloader | 发表时间:2013-11-18 20:22 | 作者:mwj19890829
出处:http://blog.csdn.net

类加载器就是寻找类或接口字节码文件进行解析并构造JVM内部对象表示的组件。在Java中,类转载器把一个类装入JVM中,需要经过以下步骤:

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

2.链接: 执行校验、准备和解析步骤,其中解析步骤是可以选择的:

a)校验: 检查载入Class文件数据的正确性;

b)准备:给类的静态变量分配存储空间;

c)解析:将符号引用变成直接引用。

类装载工作是由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装载应用程序的类,我们可以试验如下:

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());
	}
}

运行结果如下:

sun.misc.Launcher$AppClassLoader@1016632
sun.misc.Launcher$ExtClassLoader@dc6a77
null
从上述结果可以分析得出当前的ClassLoader是AppClassloader,父ClassLoader是ExtClassLoader,祖父ClassLoader是根类装载器,因为在Java中无法获得它的句柄,因此返回null。

作者:mwj19890829 发表于2013-11-18 12:22:34 原文链接
阅读:1 评论:0 查看评论

相关 [java 加载器 classloader] 推荐:

Java类加载器classLoader的工作机制

- - CSDN博客推荐文章
类加载器就是寻找类或接口字节码文件进行解析并构造JVM内部对象表示的组件. 在Java中,类转载器把一个类装入JVM中,需要经过以下步骤:. 1.装载:查找和导入Class文件. 2.链接: 执行校验、准备和解析步骤,其中解析步骤是可以选择的:. a)校验: 检查载入Class文件数据的正确性;. b)准备:给类的静态变量分配存储空间;.

java之classloader体系结构

- - 非技术 - ITeye博客
原文出处: http://www.iteye.com/topic/136427. a, Bootstrap ClassLoader/启动类加载器. 主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作.. b, Extension ClassLoader/扩展类加载器.

Java基础—ClassLoader的理解

- - ZJD'S NOTES
} ``` 其余两个ClassLoader都是继承自`ClassLoader`这个类. Java的类加载采用了一种叫做“双亲委托”的方式(稍后解释),所以除了`Bootstarp ClassLoader`其余的ClassLoader都有一个“父”类加载器, 不是通过集成,而是一种包含的关系. ``` ##“双亲委托” 所谓“双亲委托”就是当加载一个类的时候会先委托给父类加载器去加载,当父类加载器无法加载的时候再尝试自己去加载,所以整个类的加载是“自上而下”的,如果都没有加载到则抛出`ClassNotFoundException`异常.

Java ClassLoader原理分析

- - Java - 编程语言 - ITeye博客
一、JDK默认提供的三个ClassLoader. JDK 默认提供了如下几种ClassLoader. Bootstrp加载器是用C++语言写的,它是在Java虚拟机启动后初始化的,它主要负责加载 %JAVA_HOME%/jre/lib, -Xbootclasspath参数指定的路径以及 %JAVA_HOME%/jre/classes中的类.

深入浅出ClassLoader(译)

- - 并发编程网 - ifeve.com
你真的了解ClassLoader吗. 这篇文章翻译自zeroturnaround.com的 . Do You Really Get Classloaders? ,融入和补充了笔者的一些实践、经验和样例. 本文的例子比原文更加具有实际意义,文字内容也更充沛一些,非常感谢作者  Jevgeni Kabanov 能够共享如此优秀的文档.

Jetty8.0.4的ClassLoader的体系结构

- - 龙浩的blog
    1:JDK的ClassLoader基础. Bootstrap ClassLoader/启动类加载器 . 主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作. Extension ClassLoader/扩展类加载器 . 主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作.

classLoader卸载与jvm热部署 - redcreen

- - 博客园_redcreen的专栏
      以下的相关介绍都是在未使用dcevm的情况. classLoader的卸载机制.       jvm中没有提供class及classloader的unload方法.那热部署及osgi中是通过什么机制来实现的呢?实现思路主要是通过更换classLoader进行重新加载.之前的classloader及加载的class类在没有实例引用的情况下,在perm区gc的情况下会被回收掉..

javaSE之类加载器

- - ITeye博客
类加载器,说白了就是加载类的呵呵.   .类加载器负责将.class文件(可能在磁盘上,也可能在网络上)加载到内存中,并为之生成对应的java.lang.Class对象.   .当JVM启动时,会形成由三个类加载器组成的初始类加载器层次结构:.                  BootStrap----------JRE/lib.jar      根节点类加载器.

理解类加载器

- - CSDN博客推荐文章
转载请注明: http://blog.csdn.net/HEL_WOR/article/details/51287786. 5个月前写了第一篇博客就是类加载器,这两天在common-pool2中的驱逐逻辑里遇到了对上下文类加载器的使用,觉得需要重写写一次. 类记载器通俗来理解就是用来加载class文件,当需要创建一个对象时,都会使用到类加载器,对于继承自ClassLoader抽象类的子类加载器实现加载功能都是调用defineClass来完成的,这点在URLClassLoader中重写的findClass方法中可以看见.

Java中的锁(Locks in Java)

- - 并发编程网 - ifeve.com
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一. 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂. 因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字( 译者注:这说的是Java 5之前的情况).