3

不同的操作系统/平台有不同版本的 JVM。这意味着开发它的人已经为主要操作系统制作了不同的解释器。如果今天有一个新的操作系统出现,java 也会在它上面工作吗?那么,当我们说平台独立时,我们是在限制 JVM 可用的平台,还是 Java 实际上是平台独立的?

4

7 回答 7

7

你在这里混淆了几个不同的东西。

它是独立于平台的Java 编程语言,并且通过扩展,任何用它编写的程序。

JVM 本身不是平台独立的:它是平台相关的手段,通过它实现语言的平台独立性。

于 2012-09-09T08:04:25.910 回答
6

显然,Java 不能在没有 JVM 的平台上运行。因此,从字面意义上来说,Java 并不是独立于平台的。但与此同时,您对平台独立性的定义没有用。任何可能的语言都不可能真正独立于平台,因为平台的某些方面需要能够解析语言。考虑到所有可能的平台,有些平台必然无法解析它。

因此,考虑到很多很多平台都运行 JVM,并且 Java 代码可以在任何具有相同含义的 JVM 上运行,Java 是平台相关的。

于 2012-09-09T07:58:30.417 回答
2

对于 Java,平台独立性仅指这样一个事实,即如果您正确编写代码,则生成的编译代码应该在任何支持 JVM 的平台上运行不变且完全相同。

于 2012-09-09T08:00:37.267 回答
2

显然,如果没有 JVM,您就没有机会执行字节码。这个问题让我想知道将 JVM 移植到新平台实际上有多么困难。 Wpedia有(重新 HotSpot VM):

第三方也可以为 Mac OS X 和各种其他 Unix 操作系统提供端口。支持多种不同的硬件架构,包括 x86、PowerPC 和 SPARC(仅限 Solaris)。

移植 HotSpot 很困难,因为代码虽然主要用 C++ 编写,但包含大量汇编语言。为了解决这个问题,IcedTea 项目开发了 HotSpot 解释器的通用端口,称为零汇编程序 Hotspot(或零),几乎没有汇编代码。此端口旨在将 HotSpot 的解释器组件轻松适应任何 Linux 处理器架构。自 1.6 版起,HotSpot 的所有非 x86 端口(PPC、IA64、S390 和 ARM)都使用零汇编程序 Hotspot 的代码。

IcedTea 开发人员 Gary Benson 使用 LLVM 为 HotSpot 开发了一个独立于平台的即时编译器,称为 Shark,以补零。

于 2012-09-09T08:03:53.870 回答
2

有不同的方面需要考虑:

JVM规范对平台独立性不是很严格,就像它没有说明应该如何实现垃圾收集一样。因此,公司可以自由地将JVM的某些组件作为平台依赖来优化性能。所以执行编译代码的JVM不是平台独立的。您需要特定于该平台的 JVM,即 windows JVM、linux JVM、Mac OS JVM 等,并且同一平台有不同的 JVM 实现。

但是Java APIJava LanguageJava Compiler是平台无关的。

于 2012-10-17T06:18:14.707 回答
1

简而言之:没有JVM,您无法在任何平台上解释Java代码。JVM是平台相关的。因此,如果今天有新的操作系统出现,java 代码将无法运行。

于 2013-09-07T15:01:17.553 回答
-1

我不认为 Java 是完全独立于平台的。

因为:

  1. 线程调度工作的时间片取决于处理器、操作系统和平台。

  2. AWT 图形随着输出设备的变化而变化,因此它显示了平台依赖性。

于 2014-01-16T11:08:39.003 回答