欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > JVM基本知识——类加载机制

JVM基本知识——类加载机制

2025/3/15 0:53:13 来源:https://blog.csdn.net/weixin_56392989/article/details/140644955  浏览:    关键词:JVM基本知识——类加载机制

类加载机制

在运行java程序时,需要先将.java文件编译.class文件、然后再进行类加载,也就是将.class文件转换为二进制流并进行加载,并在内存中生成对应类的对象。

类加载完后,会在方法区形成类的字节码(二进制数据),在堆形成类的class对象

类加载器的类型

启动类加载器(Bootstrap ClassLoader):最顶层的类加载器,通过使用C++实现,主要负责加载Java的核心类库,如rt.jar、resources.jar基础核心类。启动类加载器无法被Java程序直接引用。

扩展类加载器(Extension ClassLoader):负责加载Java的扩展库,通常位于jre/lib/ext目录下,通过ClassLoader的getSystemClassLoader()方法可以获取该加载器。

系统类加载器(System ClassLoader):也叫应用程序类加载器,主要负责加载用户类路径(ClassPath)上制定的类,可以通过ClassLoader的getSystemClassLoader()方法可以获取该加载器。

自定义类加载器(Custom ClassLoader):继承java.lang.ClassLoader实现用户自己的类加载器,通常用来加载一些特殊的类,比如从网络、数据库或特定的二进制流中加载类。

类加载的三个阶段

加载Loading

通过类的完全限定名(完整路径),查找此类字节码文件(class 文件即二进制文件),利用字节码文件创建Class对象。将二进制文件的静态存储结构转化为方法区的运行时数据结构。利用二进制文件创建Class文件,在堆中创建类的实例。

连接Linking

连接阶段可以细分为验证、准备、解析。

验证

主要对文件格式、元数据、字节码、符号引用进行验证,确保字节流中包含的信息符合当前虚拟机的要求,保证不会危害虚拟机安全。

准备

为类变量(static变量)分配内存,并设置该类变量的默认初始值(不包括用final修饰的变量),例如,int类型的静态变量会被初始化为0。

解析

将类的二进制数据中的符号引用替换为直接引用

初始化initilzation

执行为静态变量赋初值动作和静态块的执行。

双亲委派机制

加载时先把请求委托给自己的父类加载器执行,直到顶层的启动类加载器,如果父类加载器能够完成加载的就返回,不能子类加载器才会自己尝试加载。

优点:避免类的重复加载、避免java的核心Api被篡改

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词