gpt4 book ai didi

java - 当 Java 需要 JVM 来运行时,它是如何独立于平台的?

转载 作者:IT老高 更新时间:2023-10-28 11:47:37 24 4
gpt4 key购买 nike

我刚开始学习 Java,对平台独立性这个话题感到困惑。

“独立”不是意味着 Java 代码应该在任何机器上运行并且不需要安装特殊软件吗?然而,JVM 需要存在于机器中。

例如,我们需要 Turbo C 编译器来编译 C/C++ 源代码然后执行它。机器必须有C编译器。

有人能问一下,Java 被描述为“平台无关”是什么意思吗?

最佳答案

通常,编译后的代码是 CPU“执行”程序所需的确切指令集。在 Java 中,编译后的代码是一组精确的“虚拟 CPU”指令集,需要在每台物理机器上都以相同的方式工作。

因此,从某种意义上说,Java 语言的设计者决定该语言和编译后的代码将独立于平台,但由于代码最终必须在物理平台上运行,他们选择将所有平台JVM中的依赖代码。

JVM 的这一要求与您的 Turbo C 示例相反。使用Turbo C,编译器会产生平台相关的代码,不需要类似JVM的工作,因为编译后的Turbo C程序可以直接由CPU执行。

使用 Java,CPU 执行依赖于平台的 JVM。这个正在运行的 JVM 然后执行独立于平台的 Java 字节码,前提是您有一个可供它执行的 JVM。您可能会说,编写 Java 代码,您不是为要在物理机上执行的代码编写程序,而是要编写要在 Java 虚拟机上执行的代码。

所有这些 Java 字节码都可以在所有 Java 虚拟机上工作的唯一方法是为 Java 虚拟机的工作方式编写了一个相当严格的标准。这意味着无论您使用什么物理平台,Java 字节码与 JVM 接口(interface)的部分都保证只能以一种方式工作。由于所有 JVM 的工作方式完全相同,因此相同的代码在任何地方都完全相同,无需重新编译。如果您无法通过测试以确保其相同,则不允许将您的虚拟机称为“Java 虚拟机”。

当然,有一些方法可以破坏 Java 程序的可移植性。您可以编写一个程序来查找仅在一个操作系统上找到的文件(例如 cmd.exe)。您可以使用 JNI,它有效地允许您将已编译的 C 或 C++ 代码放入一个类中。您可以使用仅适用于特定操作系统的约定(例如假设“:”分隔目录)。但是你可以保证永远不必为不同的机器重新编译你的程序,除非你正在做一些非常特别的事情(比如 JNI)。

关于java - 当 Java 需要 JVM 来运行时,它是如何独立于平台的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2748910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com