JAVA虚拟机之——类加载机制
来源:互联网 发布:dbc2000数据库下载 编辑:程序博客网 时间:2024/06/02 04:36
总是忘记java虚拟机的类加载机制,不过核心思想还是清楚的:
类加载器是个树型结构,如果Parent能找到要加载的类的话,就加载Parent的,这样可以确保JDK自带的类不被项目中自定义的同名类覆盖。
如下是摘自网上的资料,留个记号:
java应用环境中不同的class分别由不同的ClassLoader负责加载。
一个jvm中默认的classloader有Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader,分别各司其职:
•Bootstrap ClassLoader 负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等
•Extension ClassLoader 负责加载java扩展类,主要是 %JRE_HOME/lib/ext 目录下的jar和class
•App ClassLoader 负责加载当前java应用的classpath中的所有类。
其中Bootstrap ClassLoader是JVM级别的,由C++撰写;Extension ClassLoader、App ClassLoader都是java类,都继承自URLClassLoader超类。
Bootstrap ClassLoader由JVM启动,然后初始化sun.misc.Launcher ,sun.misc.Launcher初始化Extension ClassLoader、App ClassLoader。
下图是ClassLoader的加载类流程图,以加载一个类的过程类示例说明整个ClassLoader的过程。
Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader三者的关系如下:
Bootstrap ClassLoader是Extension ClassLoader的parent,Extension ClassLoader是App ClassLoader的parent。
但是这并不是继承关系,只是语义上的定义,基本上,每一个ClassLoader实现,都有一个Parent ClassLoader。
可以通过ClassLoader的getParent方法得到当前ClassLoader的parent。Bootstrap ClassLoader比较特殊,因为它不是java class所以Extension ClassLoader的getParent方法返回的是NULL。
由于classloader 加载类用的是全盘负责委托机制。所谓全盘负责,即是当一个classloader加载一个Class的时候,这个Class所依赖的和引用的所有 Class也由这个classloader负责载入,除非是显式的使用另外一个classloader载入。
所以,当我们自定义的classloader加载成功了com.company.MyClass以后,MyClass里所有依赖的class都由这个classLoader来加载完成。
类加载器是个树型结构,如果Parent能找到要加载的类的话,就加载Parent的,这样可以确保JDK自带的类不被项目中自定义的同名类覆盖。
如下是摘自网上的资料,留个记号:
java应用环境中不同的class分别由不同的ClassLoader负责加载。
一个jvm中默认的classloader有Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader,分别各司其职:
•Bootstrap ClassLoader
•Extension ClassLoader
•App ClassLoader
其中Bootstrap ClassLoader是JVM级别的,由C++撰写;Extension ClassLoader、App ClassLoader都是java类,都继承自URLClassLoader超类。
Bootstrap ClassLoader由JVM启动,然后初始化sun.misc.Launcher ,sun.misc.Launcher初始化Extension ClassLoader、App ClassLoader。
下图是ClassLoader的加载类流程图,以加载一个类的过程类示例说明整个ClassLoader的过程。
Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader三者的关系如下:
Bootstrap ClassLoader是Extension ClassLoader的parent,Extension ClassLoader是App ClassLoader的parent。
但是这并不是继承关系,只是语义上的定义,基本上,每一个ClassLoader实现,都有一个Parent ClassLoader。
可以通过ClassLoader的getParent方法得到当前ClassLoader的parent。Bootstrap ClassLoader比较特殊,因为它不是java class所以Extension ClassLoader的getParent方法返回的是NULL。
由于classloader 加载类用的是全盘负责委托机制。所谓全盘负责,即是当一个classloader加载一个Class的时候,这个Class所依赖的和引用的所有 Class也由这个classloader负责载入,除非是显式的使用另外一个classloader载入。
所以,当我们自定义的classloader加载成功了com.company.MyClass以后,MyClass里所有依赖的class都由这个classLoader来加载完成。
0 0
- JAVA虚拟机之——类加载机制
- 类加载机制——JAVA虚拟机
- Java基础知识—虚拟机类加载机制
- 【Java虚拟机】之四 类加载机制
- 虚拟机类加载机制——深入理解Java虚拟机
- 深入理解java虚拟机—虚拟机类加载机制
- 【深入Java虚拟机】之四:类加载机制 | Java虚拟机
- JVM之——虚拟机类加载机制
- Java虚拟机类加载机制——案例分析
- Java虚拟机(三)——类加载机制
- Java虚拟机(三)——类加载机制
- 深入理解java虚拟机——类加载机制
- 深入理解Java虚拟机——类加载机制
- 《深入理解java虚拟机》读书笔记——类加载机制
- Java 虚拟机类加载机制
- Java虚拟机类加载机制
- Java 虚拟机 类加载机制
- java 虚拟机类加载机制
- struts2--开发模式控制台错误信息
- 需求工程师的职责:他们的主要任务是什么
- java.lang.NoSuchMethodError: com.opensymphony.xwork2.ActionContext.get(Ljava/lan
- 下载linux系统
- org.springframework.beans.NotWritablePropertyException
- JAVA虚拟机之——类加载机制
- iOS多线程(1)基本概念
- Assembly Language Note (3)
- BootStrap组件-面版
- 数据库范式学习总结
- c++ primer(第五版)学习笔记及习题答案代码版(第五章)语句
- 如何避免产生僵尸进程
- 生成验证码
- mysql大数据处理过程的注意事项