极客时间 | 深入拆解Java 虚拟机 专栏学习笔记

“知其然”也要“知其所以然”,学习 Java 虚拟机的本质,更多是了解 Java 程序是如何被执行且优化的。这样一来,你才可以从内部入手,达到高效编程的目的。

01 Java 代码是怎么运行的?

java 运行时环境 JRE Java虚拟机+Java核心类库

虚拟机,编译器,指令序列-字节码,Java 字节码指令的操作码 opcode 被固定为一个字节。

自动内存管理与垃圾回收;
ab5c3523af08e0bf2f689c1d6033ef77.webp5ee351091464de78eed75438b6f9183b.webp

Java 虚拟机运行Java字节码过程

  1. 编译而成的class文件加载到Java虚拟机中,存放在方法区,method area
  2. 栈分为 Java方法栈,本地方法栈,PC寄存器
  3. 运行过程中,每当调用一个Java方法,虚拟机会在当前线程的Java方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数。 什么是栈帧?
  4. java 虚拟机需要将字节码翻译成机器码
  5. 解释执行:逐条将字节码翻译成机器码并执行;即时编译:JIT,将一个方法中包含的所有字节码编译成机器码之后再执行。前者无需等待编译,后者的优势在于实际运行速度更快。

Java 虚拟机的运行效率