@@ -9461,7 +9461,7 @@ JVM、JRE、JDK对比:
94619461
94629462### 架构模型
94639463
9464- Java 编译器输入的指令流是一种基于栈的指令集架构。因为跨平台的设计,java 的指令都是根据栈来设计的,不同平台 CPU 架构不同,所以不能设计为基于寄存器架构
9464+ Java 编译器输入的指令流是一种基于栈的指令集架构。因为跨平台的设计,Java 的指令都是根据栈来设计的,不同平台 CPU 架构不同,所以不能设计为基于寄存器架构
94659465
94669466* 基于栈式架构的特点:
94679467 * 设计和实现简单,适用于资源受限的系统
@@ -12336,7 +12336,7 @@ public static void main(String[] args) {
1233612336
1233712337Java 语言:跨平台的语言(write once ,run anywhere)
1233812338
12339- * 当 Java 源代码成功编译成字节码后,在不同的平台上面运行无须再次编译
12339+ * 当 Java 源代码成功编译成字节码后,在不同的平台上面运行**无须再次编译**
1234012340* 让一个 Java 程序正确地运行在 JVM 中,Java 源码就必须要被编译为符合 JVM 规范的字节码
1234112341
1234212342编译过程中的编译器:
@@ -12356,9 +12356,9 @@ Java 语言:跨平台的语言(write once ,run anywhere)
1235612356
1235712357 * JDK 9 引入,是与即时编译相对立的一个概念,即时编译指的是在程序的运行过程中将字节码转换为机器码,AOT 是程序运行之前便将字节码转换为机器码
1235812358
12359- * 优点:Java 虚拟机加载已经预编译成二进制库 ,可以直接执行,不必等待即时编译器的预热,减少 Java 应用第一次运行慢的现象
12359+ * 优点:JVM 加载已经预编译成二进制库 ,可以直接执行,不必等待即时编译器的预热,减少 Java 应用第一次运行慢的现象
1236012360 * 缺点:
12361- * 破坏了 Java " 一次编译,到处运行” ,必须为每个不同硬件编译对应的发行包
12361+ * 破坏了 Java ** 一次编译,到处运行** ,必须为每个不同硬件编译对应的发行包
1236212362 * 降低了 Java 链接过程的动态性,加载的代码在编译期就必须全部已知
1236312363
1236412364
@@ -12373,7 +12373,7 @@ Java 语言:跨平台的语言(write once ,run anywhere)
1237312373
1237412374机器码:各种用二进制编码方式表示的指令,与 CPU 紧密相关,所以不同种类的 CPU 对应的机器指令不同
1237512375
12376- 指令:指令就是把机器码中特定的0和1序列,简化成对应的指令,例如mov,inc等 ,可读性稍好,但是不同的硬件平台的同一种指令(比如mov),对应的机器码也可能不同
12376+ 指令:指令就是把机器码中特定的0和1序列,简化成对应的指令,例如 mov,inc 等 ,可读性稍好,但是不同的硬件平台的同一种指令(比如mov),对应的机器码也可能不同
1237712377
1237812378指令集:不同的硬件平台支持的指令是有区别的,每个平台所支持的指令,称之为对应平台的指令集
1237912379
@@ -12408,7 +12408,7 @@ Java 语言:跨平台的语言(write once ,run anywhere)
1240812408
1240912409字节码是一种二进制的类文件,是编译之后供虚拟机解释执行的二进制字节码文件,**一个 class 文件对应一个 public 类型的类或接口**
1241012410
12411- 字节码内容是 JVM 的字节码指令,不是机器码,C、C++ 经由编译器直接生成机器码,所以 C 执行效率比 Java 高
12411+ 字节码内容是 ** JVM 的字节码指令** ,不是机器码,C、C++ 经由编译器直接生成机器码,所以 C 执行效率比 Java 高
1241212412
1241312413JVM 官方文档:https://docs.oracle.com/javase/specs/jvms/se8/html/index.html
1241412414
0 commit comments