类加载分7个步骤:
1:加载
1)通过一个类的全限定名来获取此类的二进制字节流
2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
3)在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口
2:验证
保证Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全
1)文件格式验证,如版本号是否对,是否以魔数OxCAFEBABE开头等,经过这个阶段基于字节流进行的验证之后,字节流进入内存的方法去中进行存储,后面的三个验证阶段都是基于方法区的存储结构进行的。
2)元数据验证,这一阶段是语义分析阶段,如是否有父类(除Object外都应该有父类),是否继承了不允许被继承的类。
3)字节码验证,这一阶段是对方法体进行验证,主要是进行数据流和控制流的分析。如保证跳转指令不会跳转到方法体以外的字节码指令上。
4)符号验证,将符号引用转化为直接引用
如果所运行的代码已经被验证过,在实施阶段可以使用-Xvefiry:none参数来关闭大多数的类验证措施,以缩短虚拟机类加载的时间。
3:准备
为类变量分配内存并设置类变量的初始值(即默认值),但不包括实例变量,常量的话会直接赋值他原来的值,不会是赋值默认值。
4:解析,
将常量池类的符号引用替换为直接引用
解析可能会在初始化之后,这是为了java的动态绑定。
5:初始化,执行所有的类变量赋值和静态语句块的执行。
6:使用
7:卸载
只有当加载该类的类加载器实例变为unreachable状态时,当前类才会被卸载。
另:
(1)类加载器已经在Tomcat理解的比较透彻,这里就不贴了
(2)通过子类来引用父类中定义的静态字段,只会触发父类的初始化而不会触发子类的初始化。如SubClass.value中如果value是在父类中定义的静态字段,则这样调用只会初始化父类。
(3)但一个类在初始化时,要求其父类都已经初始化了,但是对接口没有这个要求。
(4)一个类A有另一个类B的常量的引用,在编译阶段已经将类B的常量转换为对A类自身常量池的引用了。所以在A类的class文件之中并没有B类的符号引用入口。
参考 :
《深入理解java虚拟机》周志明
分享到:
相关推荐
总结,JVM 类加载机制是Java平台的核心特性之一,它确保了程序的稳定运行和动态扩展能力。理解类加载器的工作原理和双亲委派模型对于优化程序性能、解决类冲突以及构建复杂的模块化系统至关重要。在实际开发中,掌握...
### JVM实战-JVM类加载机制案例分析 #### 实验背景与目标 本次实验的主要目的是深入理解Java虚拟机(JVM)中的类加载机制。通过实践操作,掌握类的加载、连接与初始化过程,了解不同类型的类加载器及其工作原理,...
JVM的类加载机制是JVM的核心机制之一,它把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初识化,形成可以被虚拟机直接使用的Java类型。 Java代码执行流程是JVM的核心流程之一,它首先通过...
锁以及jvm类加载机制
JVM的类加载机制是Java程序运行的基础,它包括加载、验证、准备、解析和初始化等阶段。通过理解类加载机制,我们可以更好地管理类的生命周期,实现动态加载和卸载类,以及优化程序的性能。随着Java技术的不断发展,...
Java虚拟机(JVM)是Java程序运行的基础,它的类加载机制是理解Java应用程序如何启动和执行的关键部分。本文将深入JDK源码,详细解析JVM类加载机制的各个环节,帮助开发者更好地理解和优化自己的代码。 类加载机制...
Java虚拟机(JVM)的类加载机制是Java运行时环境的重要组成部分,它负责将类的字节码文件加载到内存中,进行一系列处理并使其成为可执行的Java类型。这个过程包括五个主要阶段:加载、验证、准备、解析和初始化。 1...
在Java开发中,JVM(Java虚拟机)的类加载机制是至关重要的,因为它负责将类的字节码转换为运行时的实例。本专题"性能调优专题-jvm类加载机制-performance-jvmclassloader"深入探讨了如何通过理解并优化类加载过程来...
类缓存的主要问题在于,如果JVM加载了同名的类,会出现类冲突问题。解决类缓存问题的方法有多种,例如使用不同的类加载器加载同名的类,或者使用不同的命名空间来避免类冲突。 在JVM中,类加载器会将类加载到内存中...
jvm的类加载机制详解
了解类加载机制对于解决这类问题至关重要,同时也有助于深入理解Java虚拟机(JVM)的工作原理。 Java 类加载机制主要由类加载器完成。JVM内置了三种预定义的类加载器: 1. **启动类加载器(Bootstrap ClassLoader...
Java虚拟机(JVM)是Java程序运行的核心,而类加载机制则是JVM实现程序动态加载和执行的关键部分。在深入理解Java虚拟机的工作原理时,类加载机制是一个不可忽视的重要知识点。这篇博客将探讨JVM如何加载、连接和...
Java类加载机制是Java程序运行的第一步,它对于理解Java虚拟机(JVM)的行为至关重要。类加载过程涉及到类的加载、链接(验证、准备、解析)、初始化等阶段,并且这一过程是由类加载器系统完成的。 #### 二、类加载...
"Jvm类加载机制详解" Jvm类加载机制是Java虚拟机(JVM)中一个非常重要的机制,它负责将编译后的Java类文件加载到JVM中,并对其进行验证、准备、解析、初始化和卸载等操作。 类加载机制的生命周期可以分为五个阶段...
JVM类加载机制是Java虚拟机运行时加载类的核心过程,它负责将.java编译后的字节码文件(.class)转换为内存中的类实例。本文详细阐述了这个机制,包括其工作流程、特点以及如何自定义类加载器。 首先,我们来看一下...
《JAVA-JVM-01类加载机制》 Java虚拟机(JVM)是Java程序运行的基础,其中类加载机制是其核心组成部分。本文将深入剖析Java中的类加载器和双亲委派机制,并通过示例讲解如何自定义类加载器。 类加载过程是Java程序...
在JVM的学习中,理解其内存模型、垃圾收集算法以及类加载机制至关重要。 1. **JVM内存模型** - **方法区**:也称为“永久代”,存储虚拟机加载的类信息、常量、静态变量等,是线程共享的区域。在Java 8之后,这...
Java虚拟机JVM类加载初始...了解类加载机制对于优化性能、理解和解决类加载相关问题至关重要,特别是在分布式、模块化和热部署等场景下。理解这些细节可以帮助开发者更好地控制类的生命周期,提高程序的效率和稳定性。
《Tomcat类加载机制——ClassLoader详解》 在Java Web开发中,Tomcat作为最常用的Servlet容器,其类加载机制对于理解和优化应用性能至关重要。本文将深入探讨Tomcat的ClassLoader是如何工作的,以及它如何影响到...