深入理解Java虚拟机
文章平均质量分 87
xchxch52
这个作者很懒,什么都没留下…
展开
-
Chapter 12&13-高效并发
对于64位的数据类型(long和double),允许虚拟机将没有被volatile修饰的64位数据的读写操作划分为两次32位的操作来进行,即允许虚拟机实现自行选择是否要保证64位数据类型的load、store、read和write这四个操作的原子性,这就是所谓的“long和double的非原子性协定”(Non-Atomic Treatment of double and long Variables)。当你的数据需要在不同代码块间共享,但这些代码块总是在同一线程中运行时,可以使用线程本地存储。原创 2024-08-05 00:23:05 · 862 阅读 · 0 评论 -
Chapter 8-虚拟机字节码执行引擎
8.1 概述 虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。通常会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择。 8.2 运行时栈帧结构 Java虚拟机以方法作为最基本的执行单元,“栈帧”(Stack Frame)则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,每一个方法从调用开始至执行结束的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。 每一个栈帧都原创 2024-08-05 00:17:25 · 543 阅读 · 0 评论 -
Chapter 7-虚拟机类加载机制
7.1 概述 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。 类型的加载、连接和初始化过程都是在程序运行期间完成。运行期动态加载和动态连接这个特点,使其具有动态扩展的语言特性。 7.2 类加载的时机 类的生命周期:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使原创 2024-08-05 00:14:24 · 897 阅读 · 0 评论 -
Chapter 6-类文件结构
6.1 概述 计算机只能识别0和1,但由于最近虚拟机以及大量建立在虚拟机之上的程序语言出现,把程序编译成二进制本地机器码(Native Code)已不再是唯一的选择,越来越多的程序语言选择了与操作系统和机器指令集无关的、平台中立的格式作为程序编译后的存储格式。 6.2 无关性的基石 字节码(Byte Code)是构成平台无关性的基石,而实现语言无关性的基础仍然是虚拟机和字节码存储格式。Java虚拟机不与包括Java语言在内的任何程序语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联。原创 2024-08-05 00:12:32 · 334 阅读 · 0 评论 -
Chapter3-垃圾收集器与内存分配策略
3.1 概述 垃圾收集(Garbage Collection)关注三件事:1. 哪些内存需要回收?2. 什么时候回收?3. 如何回收? 程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,不需要考虑回收 而Java堆和方法区两个区域有着很显著的不确定性:只有处于运行期间,我们才能知道程序究竟会创建哪些对象,这部分内存的分配和回收是动态的。垃圾收集器所关注的正是这部分内存该如何管理。 3.2 对象已死? 3.2.1 引用计数算法 在对象中添加一个引用计数器,每当有一个地方引用它时原创 2024-08-05 00:10:02 · 700 阅读 · 0 评论 -
Chapter2-Java内存区域与内存溢出异常
2.1 概述 由于Java虚拟机拥有自动内存管理机制,不易出现内存泄漏和内存溢出。然而,正因如此,需要了解虚拟机是怎样使用内存的,才能排查错误、修正问题。 2.2 运行时数据区域 Java虚拟机在执行Java程序时会把它所管理的内存划分为若干个不同的数据区域,这些区域有各自的用途,以及创建和销毁的时间。 2.21 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的原创 2024-08-05 00:06:56 · 658 阅读 · 0 评论