以下内容摘抄自周志明的《深入理解 Java 虚拟机》,自己也似懂非懂,仅仅是做个总结。
1. 加载。
1). 通过一个类的全限定名获取该类的二进制字节流;
2). 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构;
3). 在内存中生成一个代表这个类的 java.lang.Class 对象,作为该类的访问入口。
2. 验证。
1). 文件格式验证;
2). 元数据验证;
3). 字节码验证;
4). 符号引用验证。
3. 准备。
为类变量赋零值,或 ConstantValue 的值。
4. 解析。
把常量池中的符号引用翻译为直接引用(指针)。
1). 类或接口的解析:解析常量池中全部的 CONSTANT_Class_info ;
2). 字段解析:解析常量池中全部的 CONSTANT_FieldRef_info ;
3). 类方法解析:解析常量池中全部的 CONSTANT_MethodRef_info ;
4). 接口方法解析:解析常量池中全部的 CONSTANT_InterfaceMethodRef_info 。
5. 初始化。
有且仅有以下5种情况会触发类的初始化:
1). 遇到 new 、 getstatic 、 putstatic 、 invokestatic 这4条字节码指令时;
2). 使用 java.lang.reflect 包对类进行反射调用时;
3). 初始化一个类的时候,发现其父类还没有进行初始化;
4). 虚拟机启动时的主类;
5). 当使用 JDK 1.7 的动态语言支持时,如果一个 java.lang.invoke.MethodHandler 实例最后的解析结果为 REF_getStatic 、 REF_putStatic 或者 REF_invokeStatic 的方法句柄,并且这个方法句柄所对应的类没有进行初始化。
分享到:
相关推荐
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中,类加载器会将类加载到内存中...