首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当Java需要JVM来运行时,它是如何独立于平台的呢?

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

Stack Overflow用户
提问于 2010-05-01 12:38:50
回答 18查看 147.3K关注 0票数 81

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

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

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

有人能告诉我Java被描述为“平台无关”是什么意思吗?

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2010-05-01 15:05:32

通常,编译后的代码正是CPU“执行”程序所需的指令集。在Java中,编译后的代码是用于“虚拟CPU”的一组精确的指令,虚拟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的接口部分都只能以一种方式工作。由于所有JVM的工作方式完全相同,因此无需重新编译,相同的代码就可以在任何地方完全相同地工作。如果你不能通过测试来确保它们是一样的,你就不能把你的虚拟机叫做"Java虚拟机“。

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

票数 112
EN

Stack Overflow用户

发布于 2012-11-28 19:19:21

代码语言:javascript
复制
            Technical Article on How java is platform indepedent?

在进入细节之前,首先您必须了解平台的含义是什么?平台由计算机硬件(主要是微处理器的体系结构)和操作系统组成。Platform=hardware+Operating系统

任何与平台无关的东西都可以在任何操作系统和硬件上运行。

Java是独立于平台的,所以java可以运行在任何操作系统和硬件上。现在的问题是它是如何独立于平台的?

这是因为字节码的魔力,它是操作系统独立的。当java编译器编译任何代码时,它会生成字节码,而不是机器本机代码(与C编译器不同)。现在这个字节码需要一个解释器才能在机器上执行。这个解释器是JVM。因此JVM读取字节码(即独立于机器)并执行它。不同的JVM是为不同的操作系统设计的,字节码可以在不同的操作系统上运行。

在C或C++(不是平台独立的语言)的情况下,编译器生成的.exe文件是操作系统相关的,所以当我们在另一个操作系统上运行这个.exe文件时,它将不会运行,因为这个文件是操作系统相关的,所以与另一个操作系统不兼容。

最后,一个与操作系统无关的中间字节码使得java平台独立。

票数 54
EN

Stack Overflow用户

发布于 2010-05-01 12:42:40

这意味着Java程序员(理论上)不需要知道机器或操作系统的详细信息。这些细节确实存在,并且由JVM和类库处理它们。此外,与C语言形成鲜明对比的是,Java二进制文件(字节码)通常可以移动到完全不同的系统,而无需修改或重新编译。

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2748910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档