【发布时间】:2012-04-10 03:12:59
【问题描述】:
我一直在想,为什么有些语言(例如 Java)可以在两个 Linux 上运行而对代码几乎没有修改,而其他语言几乎必须重新编写所有代码。为什么是这样?因为内核?
对不起,如果这是一个简单的问题,但我真的没有太多线索。
另外,就Linux而言,cpu架构有什么区别。
【问题讨论】:
标签: java linux architecture compiler-construction
我一直在想,为什么有些语言(例如 Java)可以在两个 Linux 上运行而对代码几乎没有修改,而其他语言几乎必须重新编写所有代码。为什么是这样?因为内核?
对不起,如果这是一个简单的问题,但我真的没有太多线索。
另外,就Linux而言,cpu架构有什么区别。
【问题讨论】:
标签: java linux architecture compiler-construction
技术上你错了。
Java 不能在 Linux 上运行。它也不能在 Windows 上运行。它也不能在 Mac 上运行,也不能在任何其他类 Unix 操作系统上运行。就此而言,它不能在任何操作系统上运行。
它直接在机器上运行。它只适用于一种类型的机器——Java 虚拟机。幸运的是,Java 虚拟机已经在 Linux、Windows、Mac 等平台上进行了虚拟化。
【讨论】:
这是一个很长的故事,但本质上是:
Java 代码被转换为字节码可解释文件 (.class)。它由平台相关的 Java 虚拟机解释和执行,可以安装在 Windows、Linux、Mac 平台上。
但是,您可以努力使您的 C/C++ 代码 非常独立于平台,但是由于您有不同的操作系统(有时是不同的架构),您必须在您想运行它的每个系统,以便构建将在该特定机器上运行的正确二进制文件。
OBS:为了使您的代码更加独立,您应该使用所有系统上都可用的库。
OBS2:要了解有关可执行文件的更多信息,一个好的“问题”和好的“答案”是:What does executable file actually contain?
【讨论】:
因为 Java 不是编译成机器码,而是编译成由 JVM(Java 虚拟机)执行的字节码,它负责操作系统的细节(并为 Java 程序提供操作系统功能的统一接口)。
【讨论】:
Java 建立在称为 Java 虚拟机或 JVM 的虚拟计算机上。只要 JVM 在计算机上正确实现,所有 Java 程序都应该毫不费力地在那里运行。需要注意的是代码本身是否包含特定于操作的项目,例如硬编码的路径名(例如,这些在 Unix 和 Windows 之间有所不同。)
【讨论】:
问题不在于语言,而在于使用的库。我从事一个项目,该项目在 Windows 和 Linux 上轻松使用 99% 的相同代码。我们可以这样做是因为我们使用了具有 Windows 和 Linux 实现的库。这些库封装了特定于平台的代码。 Java 也是如此:它有一个标准库,每个平台的实现方式都不同。
【讨论】: