classloader准备一个类大致分为三步:
1 加载
查找并加载类的class文件的二进制数据到内存中,将其存放在运行时数据区的方法区内,然后在堆区创建一个Class对象,用来封装在方法去内的数据结构
2 链接
将已经读入到内存中的类的二进制数据合并到虚拟机的运行时环境中去
(1)验证:确保被加载类的正确性,包括类文件结构检查,语义检查,字节码验证,二进制兼容性验证
(2)为类的静态变量分配内存,并将其初始化为默认值
(3)把类中的符号引用转换为直接引用
3 初始化
为类的静态变量赋予正确的初始化值
JVM规范要求虚拟机在每个类或接口被java程序主动使用时才初始化他们,而类加载器并不需要在类被主动使用时才加载它。JVM规范允许类加载器在预料到某个类将被使用时预先加载它,如果加载过程中遇到class文件缺失或存在错误,类加载器必修在程序首次主动使用该类时再报告链接错误(LinkageError)。如果这个类一直没有被程序主动使用,类加载器就不会报告错误。
主动使用包括以下情况:
(1)创建实例
(2)访问静态变量或静态方法,不包括static final的编译时常量和通过子类引用子类可见的父类静态变量或方法
(3)反射,Class.forName()
(4)初始化一个类的子类,不适用接口
(5)JVM启动时标明的启动类
JVM初始化一个类时,会先递归初始化它所有的父类,但并不包括接口。同样,初始化一个接口也不会递归初始化其父接口。只有当程序首次使用一个接口的静态变量时,才会初始化该接口。
分享到:
相关推荐
JVM类加载过程 JVM(Java Virtual Machine)是Java语言的核心组件之一,它是Java语言的可移植性和跨平台性的基础。JVM主要组成部分包括类加载子系统、执行引擎、本地方法接口和运行时数据区。 类加载子系统是JVM的...
**案例背景**:本案例通过编写一个简单的Java程序,使用单例模式初始化静态变量和对象,来演示类的加载过程以及类加载器的委托机制。 **案例源码**: ```java public class Singleton { private static Singleton...
类加载过程中可能会遇到一些问题,如类冲突、类循环依赖等。类冲突通常发生在不同加载器加载了相同包名下的类,导致版本不一致。类循环依赖则可能引发无限递归,使得类加载失败。解决这些问题通常需要对类加载器的...
类的加载过程包括三个主要步骤:加载、连接和初始化。 1. 加载:读取.class文件并生成对应的Class对象。这个过程可能涉及文件查找、解压等操作。 2. 链接:分为验证、准备和解析三个阶段。 - 验证:确保被加载的...
总结,Java 类加载器是JVM中的重要组成部分,它决定了类的加载过程和加载源,双亲委派机制保证了类加载的有序性和安全性。理解类加载器的工作原理有助于我们更好地进行程序设计和优化,特别是在开发插件系统、模块化...
java JVM 类加载-初始化 过程
加载过程中,字节码被转换为内存中的数据结构,并在方法区(在JVM规范的早期版本中称为永久代,现代JVM中称为元空间)中存储。同时,会在堆中创建一个`java.lang.Class`对象,作为方法区数据的封装。 2. 连接(Link...
双亲委派模型的工作流程是:从顶层的Bootstrap ClassLoader开始,逐级向下尝试加载类,直到找到能加载的类为止。 通过深入JDK源码,我们可以更清晰地理解类加载机制的细节,从而在遇到问题时能迅速定位并解决。对于...
被动使用则是在JVM运行过程中,由于JVM或JDK内部需要而进行的加载,如JNI查找类、JDK工具类的使用等。 在Java开发中,理解JVM的类加载机制对于优化性能、解决类冲突问题、实现自定义类加载器等都有重要意义。例如,...
Java虚拟机(JVM)的类加载机制是Java运行时环境的重要组成部分,它负责将类的字节码文件加载到内存中,进行一系列处理并使其成为可执行的Java类型。这个过程包括五个主要阶段:加载、验证、准备、解析和初始化。 1...
本专题"性能调优专题-jvm类加载机制-performance-jvmclassloader"深入探讨了如何通过理解并优化类加载过程来提升应用程序的性能。 1. **类加载器的层次结构** Java中的类加载器分为Bootstrap ClassLoader、...
#### 三、类加载过程详解 类加载的过程主要包括以下几个步骤: **3.1 加载** 在这个阶段,JVM根据类的全限定名读取对应的二进制数据流,并将其转换为JVM内部表示的`Class`对象。 **3.2 验证** 验证阶段是为了...
通过对Java中JVM加载`.class`文件的过程及其类加载器的具体工作原理的介绍,我们可以更加深刻地理解Java程序的运行机制。了解这些基础知识对于开发高质量的Java应用程序至关重要。通过掌握类加载器的工作方式,...
本文主要探讨JVM的类加载机制,包括类加载、连接、初始化等关键过程,以及类的主动使用和被动使用的情况。 首先,我们要理解**类加载**的作用。JVM的类加载器(ClassLoader)负责将编译后的`.class`文件加载到内存...
首先,我们要知道Java程序的类加载过程通常分为三个阶段:加载、验证、准备、解析和初始化。其中,加载阶段就是JVM查找并解析字节码文件的过程。Java类的加载主要由类加载器完成,它分为引导类加载器(Bootstrap ...
当遇到`java.lang.ClassNotFoundException`异常时,通常是因为类加载过程出现了问题。了解类加载机制对于解决这类问题至关重要,同时也有助于深入理解Java虚拟机(JVM)的工作原理。 Java 类加载机制主要由类加载器...
类加载器在类加载过程中扮演重要角色,它负责找到类的字节流并将其转换为运行时可用的形式。系统提供了几个内置类加载器,如Bootstrap ClassLoader(引导类加载器)、Extension ClassLoader(扩展类加载器)和...
类缓存的主要问题在于,如果JVM加载了同名的类,会出现类冲突问题。解决类缓存问题的方法有多种,例如使用不同的类加载器加载同名的类,或者使用不同的命名空间来避免类冲突。 在JVM中,类加载器会将类加载到内存中...