jvm将类的装载过程分为3个步骤:装载,链接,初始化。而链接过程又分为:效验,准备,解析(可选)
1,
装载
负责找到二进制字节码并加载至jvm,jvm通过类的全限定名及类的加载器完成类的加载
2,
效验
对二进制字节码的格式进行效验
3,
准备
jvm为类变量分配内存,并设置默认初始值(譬如 reference设置为null boolean设置为false)
4,
解析(可选)
在类的常量池中寻找类,接口,字段,方法的符号引用,并把它替换为直接引用,在符号引用被程序首次主动使用之前,解析这个步骤是可选的
5,
初始化
为了准备让一个类或者接口首次主动使用,就要为类变量赋予正确的值(注意哦:是正确的值,不是默认值)。
什么是主动使用呢?6种活动被认为是主动使用
- (1) 调用了new。
- (2) 调用了类中的静态方法。
- (3) 调用了类中的非常量的静态字段。
- (4) 反射。
- (5) 子类的初始化方法。
- (6) jvm启动过程中指定的初始化类。
其中对于非常量的静态字段的调用还有一个条件是只有当类或者接口中的确声明了这个字段才被认为是主动使用,而对于子类或者实现接口调用父类的非常量的静态字段被认为是被动使用,不会触发初始化。如下:
public class Parent {
static int parent=(int) (Math.random()*3.0);
static {
System.out.println("老子出生了!!!");
}
}
public class Baby extends Parent {
static int baby=(int) (Math.random()*6.0)+2;
static {
System.out.println("老子经过不懈的努力,儿子也出生了~!!!");
}
}
public class Test {
public static void main(String[] args) {
int test=Baby.parent;
System.out.println(test);
}
static{
System.out.println("见证人上帝出世了!!!");
}
}
结果为:
见证人上帝出世了!!!
老子出生了!!!
1
parent是类Parent的非常量静态字段,Baby.parent触发了Parent的初始化,而Baby没有被初始化,也没有被加载。
而对于final static的字段,使用这样的字段,也不触发初始化
分享到:
相关推荐
《JVM类装载器原理详解》 Java的JVM(Java Virtual Machine)类装载器是Java运行时系统的重要组成部分,负责在程序运行期间查找并加载类的二进制数据。理解类装载器的工作原理对于优化Java应用性能和实现动态加载类...
JVM类加载过程 JVM(Java Virtual Machine)是Java语言的核心组件之一,它是Java语言的可移植性和跨平台性的基础。JVM主要组成部分包括类加载子系统、执行引擎、本地方法接口和运行时数据区。 类加载子系统是JVM的...
6. **类的生命周期**:类装载器不仅负责加载类,还参与类的初始化、使用和卸载过程。加载阶段包括找到.class文件并转换为字节码;验证阶段检查字节码是否符合Java规范;准备阶段分配静态变量内存并初始化为默认值;...
在深入理解JVM的过程中,编写自己的类装载器(ClassLoader)是一个非常实用且有趣的实践。这个“java之jvm学习笔记五(实践写自己的类装载器)”很可能是对这一主题的详细探讨。 类装载器在Java中的主要职责是动态...
Java 类装载过程是Java虚拟机(JVM)运行的核心机制之一,主要涉及到类从加载到初始化的完整生命周期。这一过程确保了程序的正确运行,并在安全性方面起到关键作用。以下是详细的解释: 1)装载(Loading): 在这...
### JVM实战-JVM类加载机制案例分析 #### 实验背景与目标 本次实验的主要目的是深入理解Java虚拟机(JVM)中的类加载机制。通过实践操作,掌握类的加载、连接与初始化过程,了解不同类型的类加载器及其工作原理,...
总结来说,JVM是Java编程的重要组成部分,它的启动过程涉及到类加载、验证、准备、解析和初始化等多个阶段。理解这些原理有助于我们更好地编写和调试Java代码,提升程序性能。通过深入研究JVM,开发者可以更好地解决...
类加载过程中可能会遇到一些问题,如类冲突、类循环依赖等。类冲突通常发生在不同加载器加载了相同包名下的类,导致版本不一致。类循环依赖则可能引发无限递归,使得类加载失败。解决这些问题通常需要对类加载器的...
【浅析J2EE应用服务器的JAVA类装载器】 Java类装载器机制是Java语言灵活性的关键组成部分,尤其在J2EE应用服务器中扮演着重要角色。理解这一机制有助于开发者更好地部署和管理应用程序,解决可能出现的部署问题。 ...
在装载过程中,JVM会查找和导入类或接口的二进制数据;在链接过程中,JVM会执行校验、准备和解析步骤,其中解析步骤是可以选择的;在初始化过程中,JVM会激活类的静态变量的初始化Java代码和静态Java代码块。 在...
在Java中,每个类都是由类装载器加载到JVM中的,并且每个类都由特定的类装载器实例加载。类装载器不仅确保了程序的动态性,还提供了强大的安全性保障。 #### 类装载器的作用 1. **动态性**:类装载器使Java程序...
本文旨在深入剖析JVM中的类装载系统,探讨类装载的原理、实现及其应用场景。 #### Java虚拟机的类装载实现与应用 ##### 装载过程简介 **装载**是指将类或接口的二进制形式(通常为`.class`文件)导入到JVM中,并...
java JVM 类加载-初始化 过程
jvmgc过程介绍(jpg)
隐式加载是在程序运行过程中,当碰到通过new等方式生成对象时,隐式调用类装载器加载对应的类到JVM中。显式加载是通过class.forName()等方法,显式加载需要的类。 类加载器 Java中的类装载器实质上也是类,功能是...
JVM参数配置,运行时数据区
在JVM启动过程中,首先会加载Java字节码文件(.class文件),这些文件包含了编译后的Java程序。字节码是一种平台无关的中间语言,JVM将其解释并转化为特定平台的机器指令执行。这个过程保证了Java程序的跨平台能力。...
在学习过程中,可能会遇到一些混淆的问题,比如类装载器的委托模型、类的加载顺序以及如何自定义类装载器以加载非标准路径的类。理解这些概念有助于解决实际开发中遇到的类加载问题,例如,当需要加载外部库或者...
类装载过程不仅涉及基本的类查找和导入,还包含了链接、验证、准备、解析和初始化等多个阶段,这些步骤确保了Java程序的安全性和可靠性。 1. **装载过程**: - **装载**:这个阶段主要是寻找指定的类或接口的二...