JVM第3讲:什么是虚拟机?
在不同操作系统上,软件包的格式各有不同。例如,Windows系统上的软件安装包通常是.exe格式,而在MacOSX系统上则是.dmg格式。这是因为不同操作系统的底层实现不同,导致.exe文件编译成的机器码只能被Windows系统识别,而.dmg文件编译成的代码只能被MacOSX系统识别。然而,系统软件无法跨平台是一个普遍的问题。熟悉Java的开发者会发现,Java代码可以在Linux、Windows等不同系统上运行,且无需为每个系统生成不同的代码。那么,Java
在不同操作系统上,软件包的格式各有不同。例如,Windows 系统上的软件安装包通常是 .exe 格式,而在 Mac OSX 系统上则是 .dmg 格式。这是因为不同操作系统的底层实现不同,导致 .exe 文件编译成的机器码只能被 Windows 系统识别,而 .dmg 文件编译成的代码只能被 Mac OSX 系统识别。
然而,系统软件无法跨平台是一个普遍的问题。熟悉 Java 的开发者会发现,Java 代码可以在 Linux、Windows 等不同系统上运行,且无需为每个系统生成不同的代码。那么,Java 是如何实现这一功能的呢?
Java 语言的独特之处在于,它不直接将代码编译成特定系统的机器码,而是编译成一种称为字节码的中间语言规范。无论是 Windows、Mac OSX 还是 Linux,Java 程序首先被编译成字节码文件,然后才能运行。
尽管如此,字节码文件本身并不能被各个系统直接理解。这时,Java 虚拟机(JVM)就发挥了关键作用。JVM 会解析字节码文件,并将其翻译成相应操作系统能理解的机器码。
简而言之,对于同一份 Java 源码文件,编译成字节码后,无论是 Linux 还是 Windows 系统都无法直接识别。这时,JVM 就像一个翻译官,在 Linux 系统上将字节码翻译成 Linux 机器码,在 Windows 系统上翻译成 Windows 机器码。这样,Java 实现了“一次编写,到处运行”的目标。
在 JVM 出现之前,为了在不同系统上运行软件,开发者必须为每个平台编写不同的代码。但有了 JVM 之后,开发者只需按照特定规范编写和编译代码,生成字节码文件,JVM 会将这些字节码转换成相应的 Windows 或 Mac 机器码。虽然最终还是会生成两份机器码,但开发者只需编写一次代码,JVM 承担了重复的工作,提高了开发效率。
许多初学者对 JVM 存在误解,认为它只能运行 Java 代码。实际上,JVM 运行的是字节码文件。如果你用 PHP 编写代码,并使用特定编译器生成符合字节码规范的文件,JVM 也可以运行。
因此,尽管名为 Java 虚拟机,但它与 Java 语言本身没有直接关系。JVM 只是按照 Java 虚拟机规范读取 Class 文件,并解析、执行字节码指令。如果你足够强大,完全可以编写一个编译器,将 PHP 代码编译成符合 JVM 规范的字节码文件,JVM 同样可以执行。
准确地说,JVM 与字节码文件(Class 文件)紧密相关。
最后,让我们回顾一下,虚拟机到底是什么?实际上,Java 虚拟机就是一个字节码翻译器,它将字节码文件翻译成各个系统对应的机器码,确保字节码文件能在各个系统上正确运行。
参考资料:
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。
Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,













