当Java需要JVM来运行时,它如何实现跨平台?

81

我刚开始学习Java,对于平台无关性这个主题感到困惑。

“无关性”难道不意味着Java代码应该可以在任何计算机上运行,并且不需要安装特殊软件吗?然而,JVM需要在计算机上安装。

例如,我们需要Turbo C编译器才能编译C / C ++源代码,然后执行它。计算机必须安装C编译器。

请问当Java被描述为“平台无关”的时候,这是什么意思?


4
据我最后查看的情况,它可以在 Borland 的网站上免费下载。 - dan04
1
是的,被列为古董软件...(http://edn.embarcadero.com/article/20841)。 - Matthew Flaschen
2
执行编译后的程序不需要Turbo C(或任何其他“本地”编译器)。编译器会生成一个.exe文件。最多只需要运行时库(在一个.dll文件中),而不是整个编译器。 - Javier
24个回答

0

这是一个很好的问题,但当源代码被编译器转换成中间本地字节码时,它会一次性进行整体检查(如果发现错误),然后程序需要一个解释器逐行检查程序并直接将其转换为机器码或目标代码。每个操作系统默认情况下都不能拥有Java解释器,因为存在某些安全原因,所以您需要不惜代价地拥有JVM才能在不同的操作系统平台上运行它。平台独立性意味着该程序可以在任何操作系统上运行,如Unix、Mac、Linux、Windows等,但这并不意味着每个操作系统都能够在没有JVM的情况下运行代码,这需要规范、实现和实例。如果我进一步改变您计算机的配置,使您可以拥有一个类加载器,即使是字节码,您也可以执行Java字节码、小应用程序等。 -由Nimish :) 祝你好运


0

字节码并不是跨平台的,但是 JVM 使得字节码变得独立。字节码不是机器码。字节码是紧凑的数值代码、常量和引用(通常是数值地址),它们编码了对程序对象类型、作用域和嵌套深度等进行解析和语义分析的结果。因此,与直接解释源代码相比,它们可以提供更好的性能。字节码需要在执行之前被解释,这总是由 JVM 解释器完成的。


-1
当我们编译Java文件时,该程序的.class文件会生成,该.class文件包含字节码。该字节码是平台无关的,可以使用Java虚拟机在任何操作系统上运行。平台独立性不仅涉及操作系统,还涉及硬件。 当您在32位机器上制作的16位机器上运行Java应用程序时,您不必担心根据目标系统转换数据类型。您可以在任何架构上运行应用程序,并且每个结果都将获得相同的结果。

-3

编辑:不完全正确。请参见下面的评论。

Java不能直接在任何东西上运行。它需要通过JVM转换为字节码。

由于所有主要平台都存在JVM,这使得Java通过JVM实现了跨平台。


1
JVM 解释或 JIT 字节码。它不会编译成字节码。 - Matthew Flaschen
是的,"for the JVM" 更加准确。 - polygenelubricants
1
http://www.jopdesign.com/ ~ 可能再试一次。这些人说它可以直接在硬件上运行。 - jcolebrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接