详解Java 中的类加载机制
首先明确下类加载的定义,类加载实际上就是将java class文件加载到java 虚拟机中,根据JVM规范的定义,一般分为2种类型的类加载,一种是启动类加载器,另外一种是用户自定义类加载器。
一 启动类加载器。
启动类加载器也有以下三种:Bootstrap ClassLoader、AppClassLoader和ExtClassLoader,这三种classloader在java虚拟机启动时会相继创建,首先启动时加载BootstrapClassLoader,然后BootstrapClassLoader加载ExtClassLoader,然后ExtClassLoader加载AppClassLoader,他们之间是由父子关系的,也就是通过父的classloader加载子classloader.下边分别介绍下这三种不同的classloader。
BootstrapClassLoader比较特殊,实际上它不是 java.lang.ClassLoader的子类,是C++编写的,java虚拟机启动时第一个执行,它是java虚拟机自带的装载器,用来装载核心类库,也就是java.lang.*,因为是c++编写的,所以在运行时,我们无法获取BootstrapClassLoader的任何信息。
ExtClassLoader的父亲是BootstrapClassLoader,但是在java运行时环境中,由于无法获取BootstrapClassLoader的任何信息,因此我们通过获取ExtClassLoader的parent的方式查看其父亲,会发现得到是null。ExtClassLoader的职责是负责加载JRE的扩展目录(JAVA_HOME/jre/lib/ext或者由java.ext.dirs系统属性指定的)中JAR的类包。
AppClassLoader的父亲是ExtClassLoader,它的主要职责是加载用户应用系统所需要的类,如用户系统自己编写的class,或用户系统导入的其他jar架包。
下边用代码测试下这三种类加载器:
/**
* 测试类加载机制
* @author Administrator
*
*/
public class TestLoader
{
/**
* 分别加载三种不同类型的class类检验其用到的加载器。
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception
{
// 获取AppClassloader
ClassLoader appClassloader = ClassLoader.getSystemClassLoader();
// 获取ExtClassloader,也就是AppClassloader的父亲
ClassLoa
相关文档:
Here is a simple library to query Google Maps with the following features:
geocode addresses to their geographic coordinates
retrieve static images with given custom size, format and zoom
To see a live sample of this API, you can check here: Java ME Google Maps API sample MIDlet
Contents
[h ......
http://www.java-cn.com/technology/tech/4759.html
偶尔在网上发现的一片关于掌握JAVA的标准,感觉有点意思,虽然在一些观点上有些偏颇,但作为学习JAVA的引导尚可。至于原创是谁没有必要考证。
时常看到一些人说掌握了Java,但是让他们用Java做一个实际的项目可能又困难重重,在这里,笔者根据 ......
自从学习Java以来已经一年有余了,对Java还只是初阶段的了解,都怪在学校的时候贪玩没有有效的利用时间,现在在一个培训学校学习Java,现在就要做项目了还是什么都不懂,还好有Csdn。
在Csdn的日子里叫我找到了家的感觉,得到了很 ......
Ubuntu Linux Install Sun Java Development Kit ( JDK ) and Java Runtime Environment ( JRE )
by Vivek Gite
Q.
How do I install Sun
Java Development Kit (JDK) and Java Runtime Environment (JRE) under
Ubuntu Linux? It appears that there are multiple JRE installed by
default under Ubuntu. ......