众所周知,Java 语言编译生成的 class 文件可以运行在任何支持 Java 虚拟机的硬件平台和操作系统上。那么,你是否思考过:class 文件包含哪些内容?是如何在虚拟机中执行的?要弄清楚这些问题,须了解 class 文件结构和 Java 虚拟机字节码指令。Java 虚拟机字节码指令非常重要,学习它对深入理解虚拟机、栈、锁、异常、同步等的原理十分有益,是Java 进阶之路必读内容之一。
本系列一共有两篇文章,这是第一篇,主要内容如下:
图文解读 class 文件结构;
- Java 字节码介绍;
- 详解 Java 虚拟机栈结构;
- 实例解读 Java 虚拟机中变量、常量访问原理和指令体系;
- 实例解读 Java 虚拟机中对象、数组(数值数组、对象数组、多维数组)创建指令;
- 实例解读 Java 虚拟机中方法、字段 (又称域-field) 访问的原理及指令体系。
引言
计算机本身只能识别 0 和 1 构成的机器码,因此,任何编程语言最终都需要编译成机器码才能被计算机执行。以 C/C++ 为例,用它们编写的程序首先被编译,然后被连接成单独的、支持特定硬件平台和操作系统的二进制文件。通常情况下,一个平台上的二进制可执行文件不能在其它平台上工作。
Java 在诞生之初便提出了著名的 slogan:“Write Once, Run Anywhere”,为了实现这一目标,Java 虚拟机应运而生。目前,Java 虚拟机有很多版本,但它们都具有一个共同的特征——可以载入并执行同一种与平台无关的字节码(ByteCode)。 因为 Jav