java真的是平台独立吗?

时间:2012-09-09 07:56:22

标签: java jvm platform-independent

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

7 个答案:

答案 0 :(得分:6)

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

因此,鉴于许多平台运行JVM,并且Java代码可以在具有相同含义的任何JVM上运行,因此Java依赖于平台。

答案 1 :(得分:6)

你在这里混淆了几件不同的事情。

Java编程语言与平台无关,并且通过扩展,可以编写任何程序。

JVM本身不是平台独立的:它是依赖于平台的手段,通过它可以实现语言的平台独立性。

答案 2 :(得分:2)

对于Java,平台独立性仅指的是如果您正确编写代码,则生成的编译代码应在任何支持JVM的平台上保持不变且相同。

答案 3 :(得分:2)

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

  

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

     

移植HotSpot很困难,因为代码虽然主要是写的   在C ++中,包含了很多汇编语言。为了解决这个问题,   IcedTea项目开发了HotSpot的通用端口   解释器称为零汇编程序Hotspot(或零),几乎没有   汇编代码。此端口旨在方便地适应   HotSpot的解释器组件到任何Linux处理器体系结构。   零汇编程序Hotspot的代码用于所有非x86端口   自1.6版以来的HotSpot(PPC,IA64,S390和ARM)。

     

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

答案 4 :(得分:2)

需要考虑不同的方面:

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

Java API Java语言 Java编译器与平台无关。

答案 5 :(得分:1)

简而言之: 没有JVM,您无法在任何平台上解释Java代码。 JVM是一个依赖于平台的。 因此,如果今天有新的操作系统,那么java代码就不会运行了。

答案 6 :(得分:-1)

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

由于:

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

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