第七章 类型的生命周期
1. 类型装载、链接与初始化
装载:将二进制形式的Java类型读入Java虚拟机中;
连接:将二进制形式的类型数据合并到迅即的运行时状态中去;
A. 验证:确保Java类型数据格式正确并且适用于Java虚拟机适用;
B. 准备:负责为该类型分配它所需的内存环境;(如类变量分配内存)
C. 解析:负责将常量池中的符号应用转换为直接引用;
初始化:给类变量赋予适当的初始值;
JVM严格定义了初始化的时机,所有的Java虚拟机实现必须在每个类或者接口的首次主动使用时初始化:
1. 当创建这个类的新实例时(或者通过字节码执行new指令,或者反射,克隆,反序列化)
2. 调用某个类的静态方法
3. 使用这个类或者接口的静态字段,或者是对这个字段赋值(final修饰的字段除外,编译阶段被初始化为常量表)
4. 当调用Java API 中的某些反射方法时,比如Class中的方法或者java.lang.reflect包中的方法
5. 当初始化某个类的子类时;
6. 当标明为启动类时(含main方法的那个类)
被动使用:父类中声明的字段被子类引用,在子类中调用父类这个变量时,是不是初始化自己的;
1. 装载
3个基本动作:a 通过该类型的完全限定名,产生一个代表该类型的二进制数据流
b 解析这个二进制数据流为方法区内的内部数据结构
c 创建一个表示该类型的java.lang.Class类的实例
2. 连接
验证: 确认类型符合Java语言的语义,并且他不会危及虚拟机的完整性(父类的装载(有的话),final的验证,符号引用的验证。。。)
准备: 为类变量分配内存空间,设置默认初始值
解析:将符号引用转化为直接引用的过程
3. 初始化:赋予正确的初始值
1) 如果类存在直接的超类,且还没有初始化的话,就先初始化超类(接口除外)
2) 如果类存在一个类初始化方法,就执行此方法
3) 初始化的过程是同步的
2. 对象的生命周期
1. 类的实例化:(4个方式,不多说了)
当Java虚拟机创建一个类的新实例时,不管是明确的还是隐含的,首先都需要在堆中为保存对象的实例变量分配内存,所有在对象的类中它的超类中声明的变量都要分配内存。
2. 垃圾回收和对象的终结
程序可以明确或者隐含地位对象分配内存,但是不能明确地释放内存。如果类声明了一个名为finalize()的返回void的方法,垃圾收集器会在释放这个实例所占据的内存空间之前执行这个方法(被称为终结方法)一次。垃圾收集器最多只会调用一个对象的终结方法一次(在对象变成不再被引用的之后的某个时候,在占据的对象被重用之前)。
3. 卸载类型
使用启动类装载器装载的类型永远是可触及的,所以永远不会被卸载,只有使用用户自定义类装载器装载的类型才会变成不可触及的。
判断动态装载的类型Class实例在正常的垃圾收集过程中是否可以触及有两种方式,第一,也是最明显的,如果程序保持对Class实例的明确引用,它就是可触及的。其次,如果在堆中还存在一个触及的对象,在方法区中它的类型数据指向一个Class实例,那么这个Class实例就是可触及的。
分享到:
相关推荐
深入 Java 虚拟机.pdf Java 虚拟机(Java Virtual Machine,JVM)是 Java 语言的 runtime 环境,是 Java 程序执行的核心组件。它提供了一个平台无关的环境,允许 Java 程序在不同的操作系统和硬件平台上运行。 一...
Java虚拟机(JVM)是Java程序运行的基础,它提供了执行环境和各种内存区域,以支持Java代码的高效运行。本地方法栈是JVM的一部分,它主要负责处理与本地方法(通常是由C或C++编写)相关的调用。本地方法栈在Java线程...
第7章 类型的生命周期 7.1 类型装载、连接与初始化 7.1.1 装载 7.1.2 验证 7.1.3 准备 7.1.4 解析 7.1.5 初始化 7.2 对象的生命周期 7.2.1 类实例化 7.2.2 垃圾收集和对象的终结 7.3 ...
第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是锁的支持。第9~~10章介绍了虚拟机的核心——Class文件结构,以及虚拟机中类的装载系统。第11章介绍了虚拟机的执行系统和字节码,并...
通过阅读《深入理解Java虚拟机》第三章,开发者不仅可以深入理解Java的安全机制,还能学习到如何在实际项目中实施这些安全策略,提升应用的安全性。对于想要从事Java开发或者对系统安全有深入了解需求的人来说,这一...
- **Java虚拟机的生命周期**:JVM的生命周期从启动到关闭的过程,涉及到类的装载、初始化等多个阶段。 - **Java虚拟机的体系结构**:JVM的体系结构主要包括内存区域划分、执行引擎等方面。 - **数据类型**:JVM支持...
java虚拟机读书笔记,主要描述阅读Java虚拟机核心技术的描述。
第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally...
java虚拟机不用多少了吧。 深入java虚拟机第二版.pdf
【深入Java虚拟机(二)——类的生命周期(上)类的加载和连接】 Java虚拟机(JVM)是Java程序的核心,它负责解释和执行Java字节码。类的生命周期在JVM中是一个关键的概念,它涵盖了从类的加载到卸载的整个过程。...
【深入Java虚拟机(三)——类的生命周期(下)类的初始化1】 类的生命周期在Java中是一个关键的概念,它涵盖了从加载到卸载的整个过程。在类的生命周期中,初始化阶段是非常重要的,因为它涉及到类的静态变量的赋值...
《深入Java虚拟机》这本书是Java开发者深入了解JVM(Java Virtual Machine)的必备经典之作。它详尽地探讨了Java虚拟机的工作原理、内存管理、类加载机制、字节码执行以及性能优化等多个核心主题,旨在帮助开发者...
《深入JAVA虚拟机第二版》是由Bill Venners撰写,并由曹晓钢和蒋靖翻译的中文书籍。这本书是Java开发者必备的经典读物,它详细地解析了Java虚拟机(JVM)的工作原理,帮助读者深入理解Java程序的运行机制。尽管描述...
通过阅读《深入JAVA虚拟机》和《JVM规范》,结合实际的代码分析,可以让我们更好地理解和掌握这个强大的虚拟机。无论是初级开发者还是经验丰富的专家,都应该对JVM有深入的理解,这将极大地提升我们的编程实践能力。
第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是对锁的支持。第9~10章介绍了Java虚拟机的核心——Class文件结构,以及Java虚拟机中类的装载系统。第11章介绍了Java虚拟机的执行...
深入理解Java虚拟机,首先我们要明白Java虚拟机(JVM)的核心功能:它负责装载类文件,执行字节码,并管理内存。Java虚拟机的结构复杂且高效,主要由类装载器、执行引擎、内存管理和类库等组件构成。 类装载器是JVM...
《深入JAVA虚拟机 不那么完美的第二版》这本书虽然在印刷上可能存在一些小瑕疵,但这并不影响我们从中汲取宝贵的Java虚拟机(JVM)知识。Java虚拟机是Java平台的核心组成部分,它负责执行Java程序,提供了跨平台的...
第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12章 整数运算 第13章 逻辑运算 第14章 浮点运算 第15章 对象和数组 第16章 控制流 第17章 异常 第18章 finally...
深入JAVA虚拟机,帮助大家在Java方面进行学习,深入JAVA虚拟机,帮助大家在Java方面进行学习,
讲述java虚拟机 唯二的书。本书作者曾因本书荣获专业技术杂志《Java Report》评选的优秀...作者以易于理解的方式深入揭示了Java虚拟机的内部工作原理,深入理解这些内容,将对读者更快速地编写更高效的程序大有裨益!