JVM类加载机制

来源:互联网 发布:sql语句转换成linq 编辑:程序博客网 时间:2024/05/21 07:05

类加载过程

虚拟机把描述类的数据从class文件加载到内存,到使用完卸载出内存为止,它的整个生命周期包括如下几个过程:


加载:查找和导入Class文件。
验证:检查载入Class文件的字节流中包含的信息是否符合当前虚拟机的要求。验证阶段大体上会完成:文件格式、元数据、字节码、符号引用验证。
准备:给类的静态变量分配存储空间。
解析:将常量池内的符号引用转成直接引用的过程。
初始化:根据java文件中的代码初始化变量和其他资源。

加载器种类

1) 启动类加载器(Bootstrap ClassLoader):由C++编写,是JVM自带的加载器,主要用来读取Java的核心类库JRE/lib/rt.jar。无法被java程序直接引用。
2) 扩展类加载器(Extension ClassLoader):负责加载java平台中扩展功能的一些jar包,包括jre/lib/ext/*.jar或-Djava.ext.dirs指定目录下的jar包。
3) 应用程序类加载器Application ClassLoader):负责记载classpath中指定的jar包及目录中class。如果应用程序中没有自定义过自己的类加载器,一般情况下就是程序中默认的加载器。

双亲委派模型





这些加载器之间的层次关系如图所示,称之为双亲委派模型。双亲委派模型要求除了顶层的启动类加载器外,其他的加载器都应当有自己的父类加载器。
双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,它自己先不会去加载这个类,而是先把这个请求委派给父加载器去完成。因此所有的加载请求最终都应该传递到等起的类启动加载器中,只有当父加载器反馈自己无法完成加载请求时(它的搜索范围中没有找到所需的类),子加载器才会尝试自己进行加载。

原创粉丝点击