参考资料
引入虚拟机
都知道在 Windows 系统上一个应用程序或软件安装包是以 .exe
为后缀的,而这个应用程序如果是 Mac OsX 系统上的应用的话,则是以 .dmg
为后缀的,无法放在 Windows 系统上去打开/安装。
由于各系统下的操作系统底层的实现不一样,使得系统上的软件无法安装。对于Windows 系统来说,.exe
后缀的软件代码最终编译成 Windows 系统能识别的机器码。而 Mac OSX 系统来说,.dmg
后缀的软件代码最终编译成 Mac OSX 系统能识别的代码。
小编在学习 Java 过程中,知道 Java 代码可以在服务器端(Linux系统)运行,也可以在 Windows 系统上运行,没有对代码进行移植。小编不知道咋做到的,直至今日。
Java语言并不同其他语言一样,它并不是直接将代码编译成系统有关的机器码,而是编译成一种特定的语言规范,这种语言规范被称为字节码。 无论Java程序是在 Windows 系统,还是 Mac OSX 系统,抑或是 Linux 系统,它首先都得编译成字节码文件,之后才能运行。
但即使编译成字节码文件了,各个系统还是无法明白字节码文件所指的具体内容。这时 JVM(下面进行概述) 便出现了,它会解析字节码文件的内容,将其翻译为各个操作系统能理解的机器码。
准确的说 JVM 就是一个翻译官,把字节码文件翻译成各个系统所能理解的机器码,以便运行。再确切地说:Java虚拟机(JVM)是和字节码文件(Class文件)绑定在一起的,和 Java 文件没有任何关系,它只是按照规范去读取Class文件,去解析并执行字节码指令。
也就是说即便不是由编译Java文件产生的字节码文件,其他语言编译后形成符合规范的字节码文件,JVM也是可以读取、解析的。
JVM 概述
JVM 全称 Java Virtual Machine - Java虚拟机。被用来当作Java程序的运行环境,准确的说应该是Java 二进制字节码的运行环境。 JVM 是运行在操作系统上的,它和硬件没有直接的交互。
严格来说 JVM 也是虚拟机的一套规范,有很多不同的实现,Sun/OracleJDK 和 OpenJDK中的默认Java虚拟机是 HotSpot
虚拟机,是目前使用范围最广泛的Java虚拟机。
好处:
- 一次编写,到处运行。便是JVM的功劳,Java被编译成字节码文件后,可以通过JVM实现跨平台(而不是像一些其他语言一样,直接编译成与系统有关的机器码)。
- 自动内存管理,垃圾回收功能。
- 多态提高了程序的扩展性,而它的实现是由JVM通过虚方法表去实现的。
- 数组下标越界检查
- …
比较:
JVM :字节码文件运行环境。
JRE (Java Runtime Environment):JVM + 基础类库,形成了真正的Java运行环境。
JDK(Java Development Kit):JRE + 编译工具。
JavaSE(Java Standard Edition,Java标准版):开发JavaSE程序,即需要 JDK + IDE工具。
为什么学习 JVM
- 可以清楚的知道 Java 程序是如何执行的。
- 可以明白为什么 Java 等高级语言具有可移植性强的特性。
- 小编不甘做一个平庸的Java码农。
- 方便查找 Java 程序中的一些问题。
- 方便以后优化 Java 程序。
- 面试
- …