深入理解 Java 虚拟机读书笔记5

*.class 文件

Java 之所以与平台无关,靠的就是虚拟机字节码。只要能运行虚拟机的平台就能运行 Java 程序,而 Java 程序会被转为字节码格式进行存储,并被虚拟机所使用。

这一特点也使得语言和虚拟机相互独立(因为 Java 虚拟机设计之初就没有强关联 java),这使得同样的虚拟机可以加载不同语言编写的程序,因为其编译后的程序都以字节码格式存储。

而字节码格式文件则是以 *.class 文件表示,Class 文件格式所具备的平台中立(即不依赖于特定平台或硬件)、紧凑、稳定和可扩展的特定,是 Java 技术体系实现平台无关、语言无关两项特性的重要支柱。

*.class 文件内容结构

Java 代码的 *.class 文件可通过 javac 命令编译得到,文件内容是以 16 进制展示的二进制流。具体文件内容规范格式可见下图:


*.class 文件内容格式.jpg
字节码指令

Java 虚拟机指令由一个字节长度的数字(代表某种特定操作)和紧随其后的零至若干参数构成。不过因为 Java 虚拟机采用操作数栈的架构,多数情况下,一个指令仅包含操作码。

具体的指令有:

  • 加载和存储
  • 运算
  • 类型转换
  • 对象创建与访问
  • 操作数栈管理
  • 控制转移
  • 方法调用和返回
  • 异常处理
  • 同步

你可能感兴趣的:(深入理解 Java 虚拟机读书笔记5)