写点什么

JVM 类加载机制笔记

用户头像
风翱
关注
发布于: 2021 年 04 月 26 日

JVM 类加载过程包括 5 个阶段(7 个部分):加载、检验、准备、解析、初始化、(使用、卸载)。



加载:查找并加载类的二进制文件。在这个阶段主要做三件事情:

  1. 通过类的全限定名来获取定义此类的二进制字节流。

  2. 将这个类字节流代表的静态存储结构转为方法区的运行时数据结构。

  3. 在堆中生成一个代表此类的 java.lang.Class 对象,作为访问方法区这些数据结构的入口。


连接

验证:检验被加载的类的正确性,属于连接阶段的第一步,目的是为了确保加载的 Class 文件的字节流包含的信息符合 JVM 的要求,不会危害到 JVM 自身的安全性。


准备:为类的静态变量分配内存,并将其初始化为默认值。


解析:把类中的符号引用转换为直接引用。


初始化:为类的静态变量赋予正确的初始值,JVM 负责对类进行初始化,主要是对类变量进行初始化。



类加载器

包括:启动类加载器(Bootstrap ClassLoader)、扩展类加载器(ExtClassLoader)、应用类加载器(AppClassLoader)。


启动类加载器:负责加载存放在 JDK\jre\lib(JDK 代表 JDK 的安装目录,下同)下,或被-Xbootclasspath 参数指定的路径中的,并且能被虚拟机识别的类库(如 rt.jar,所有的 java.*开头的类均被 Bootstrap ClassLoader 加载)。启动类加载器是无法被 Java 程序直接引用的。


扩展类加载器:由 sun.misc.Launcher$ExtClassLoader 实现,它负责加载 DK\jre\lib\ext 目录中,或者由 java.ext.dirs 系统变量指定的路径中的所有类库(如 javax.*开头的类),开发者可以直接使用扩展类加载器。


应用类加载器:由 sun.misc.Launcher$AppClassLoader 来实现,它负责加载用户类路径(ClassPath)所指定的类,开发者可以直接使用该类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。

发布于: 2021 年 04 月 26 日阅读数: 20
用户头像

风翱

关注

还未添加个人签名 2017.11.24 加入

勇于尝试,持续成长

评论

发布
暂无评论
JVM类加载机制笔记