Java 类加载机制 ClassLoder
2015-08-25 00:09
627 查看
纸上得来终觉浅,绝知此事要躬行
--陆游 问渠那得清如许,为有源头活水来 --朱熹
一个类从被加载到内存中开始到卸载出内存为止,它的整个生命周期包括了:加载(loading)、验证(Verification)、准备(Preparetation)、解析(Resolution)、
初始化(Initialization)、使用(Using)、卸载(Uploading)七个阶段。其中验证’准备和解析称为链接。
一、ClassLoader类加载的架构
1)、Bootstrap Classloader启动类加载器,主要负责java_home/lib下的核心api或者-Xbootstrap选项指定的jar包装入工作。
2)、Extension ClassLoader扩展类加载器,主要负责java_home/lib/ext下jar包
3)、App CLassLoader 系统类加载器,主要负责Java -classpath/所指的目录下的类与jar包的装入工作;
4)、 UserCustom ClassLoader用户自定义类加载器,在程序运行期间,通过Java.lang.Classloader的子类动态加载class
二、类加载的特性
1)、每一个ClassLoader都会维护一个自己的命名空间,同一个命名空间不能出现两个相同的类名
2)、为了实现java安全沙箱模型顶层的类加载器安全机制, java默认采用了 " 双亲委派的加载链 " 结构。
三、类的加载方式有三种:
1)、命令行启动应用时由JVM初始化加载。
2)、通过class.forName()方法动态加载。
3)、通过ClassLoader().loadClass()方法动态加载。
这三种加载方式对静态代码块的执行有影响。
如下例子:
一、ClassLoader类加载的架构
1)、Bootstrap Classloader启动类加载器,主要负责java_home/lib下的核心api或者-Xbootstrap选项指定的jar包装入工作。
2)、Extension ClassLoader扩展类加载器,主要负责java_home/lib/ext下jar包
3)、App CLassLoader 系统类加载器,主要负责Java -classpath/所指的目录下的类与jar包的装入工作;
4)、 UserCustom ClassLoader用户自定义类加载器,在程序运行期间,通过Java.lang.Classloader的子类动态加载class
--陆游 问渠那得清如许,为有源头活水来 --朱熹
一个类从被加载到内存中开始到卸载出内存为止,它的整个生命周期包括了:加载(loading)、验证(Verification)、准备(Preparetation)、解析(Resolution)、
初始化(Initialization)、使用(Using)、卸载(Uploading)七个阶段。其中验证’准备和解析称为链接。
一、ClassLoader类加载的架构
1)、Bootstrap Classloader启动类加载器,主要负责java_home/lib下的核心api或者-Xbootstrap选项指定的jar包装入工作。
2)、Extension ClassLoader扩展类加载器,主要负责java_home/lib/ext下jar包
3)、App CLassLoader 系统类加载器,主要负责Java -classpath/所指的目录下的类与jar包的装入工作;
4)、 UserCustom ClassLoader用户自定义类加载器,在程序运行期间,通过Java.lang.Classloader的子类动态加载class
二、类加载的特性
1)、每一个ClassLoader都会维护一个自己的命名空间,同一个命名空间不能出现两个相同的类名
2)、为了实现java安全沙箱模型顶层的类加载器安全机制, java默认采用了 " 双亲委派的加载链 " 结构。
三、类的加载方式有三种:
1)、命令行启动应用时由JVM初始化加载。
2)、通过class.forName()方法动态加载。
3)、通过ClassLoader().loadClass()方法动态加载。
这三种加载方式对静态代码块的执行有影响。
如下例子:
public class MyHello { static { System.out.println("hello word"); } } public class Hello { public static void main(String[] args) { ClassLoader loader=Hello.class.getClassLoader(); try { //静态代码块不运行 //loader.loadClass("Test.MyHello"); //静态代码块运行输出hello world //Class.forName("Test.MyHello"); //静态代码块不运行 //Class.forName("Test.MyHello", false, loader); //静态代码块运行输出hello world Class.forName("Test.MyHello", true, loader); } catch (ClassNotFoundException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }
一、ClassLoader类加载的架构
1)、Bootstrap Classloader启动类加载器,主要负责java_home/lib下的核心api或者-Xbootstrap选项指定的jar包装入工作。
2)、Extension ClassLoader扩展类加载器,主要负责java_home/lib/ext下jar包
3)、App CLassLoader 系统类加载器,主要负责Java -classpath/所指的目录下的类与jar包的装入工作;
4)、 UserCustom ClassLoader用户自定义类加载器,在程序运行期间,通过Java.lang.Classloader的子类动态加载class
相关文章推荐
- java之 ------ DAO设计模式的【详解】及常见设计模式的【应用】
- Java序列化Serializable和Externalizable
- Java序列化Serializable和Externalizable
- Java序列化Serializable和Externalizable
- Eclipse中创建maven web项目
- Maven搭建SpringMVC+Mybatis项目详解
- Java虚拟机
- Java异常
- Java虚拟机
- Java异常
- Java虚拟机
- Java异常
- Java线程详解
- 如何实现主线程需要等待子线程的结果,然后才能往下执行。
- 图解 & 深入浅出 JavaWeb:Servlet必会必知
- Spring Aop 实现拦截器功能之基础 - 001
- Java web 项目搭建
- Introduction to Java Programming编程题9.5<统计字符串中数字的个数>
- 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例
- java中变量存储位置