java - 与本地编译语言相比,使用虚拟机编译(例如 JVM)有什么优势?

标签 java c pascal qbasic

我听说 java 的优点是人们可以编写代码,为 JVM 编译它,然后在任何地方运行它。每个人只需要一个适用于他们平台的 JVM 应用程序。

当然,它看起来与当前情况类似,每个人都有一个特定于其平台的编译器。所以优势不能用那个来解释。但我想我看到了解释.. 问题一定是在 java 情况下,你不能或不打算以特定于操作系统的方式直接访问真实机器。

我想这意味着在其他语言中,代码本身必须根据它运行的计算机进行修改。

任何人都可以提供这方面的简短示例,例如演示此内容的 Hello World 程序吗?毫无疑问,它会在非 Java 中,例如C

因为这不是 Hello World 程序中通常会发生的事情,也不是自从我使用有关 Java 的书籍以来我见过的大多数事情,不幸的是,它们是“如何编程”风格的书籍,以及其中的所有内容没有演示它(也许是因为他们不能或不想使用 java 来演示它!)。尽管他们吹嘘这是一个很大的优势。我想看看它的例子。

最佳答案

... where everybody has a compiler specific for their platform. So the advantage isn't explained by that.

移植用例如 C 或 C++ 编写的代码几乎总是比简单地重新编译代码要复杂得多。这当然不是普通的非开发人员计算机用户可以轻松完成的事情。用编译语言编写的代码通常是针对特定操作系统的 API(例如 Win32 API)编写的,因此无法在其他操作系统上轻松编译。

Java 字节码可以在任何有可用的 Java 运行时环境的平台上运行。代码不需要重新编译。当然,您可以用 Java 编写特定于操作系统的代码,但 Java 的标准库和 Web 上提供的许多免费库提供了非常丰富的跨平台环境。

除了便携性,在虚拟机上运行还有其他优势。 Java 使用 JIT compiler在运行时将 Java 字节码编译为 native 机器码。 JIT 编译器可以对程序运行的特定 CPU 进行复杂的优化,并且它可以使用提前编译器无法获得的分析信息 - 原则上,JIT 编译器因此可以生成更优化的代码比“普通”编译器。

除了Java VM,还有其他虚拟机。例如,Microsoft .NET 包含 CLR (公共(public)语言运行时)还有 LLVM ,它有许多不同语言的前端,包括 C 和 C++(并且应该将 JIT 编译的优势也带到 C 和 C++)。

关于java - 与本地编译语言相比,使用虚拟机编译(例如 JVM)有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3224288/

相关文章:

java - 如何创建安全许可的 Java EE 应用程序?

Windows 上智能卡的 Java keystore 和密码安全性

Java Scanner 类 useDelimiter 方法

c++ - 无法在 Intel Xeon Phi 上执行二进制错误

delphi - 如何读取AD显示名称

scripting - 如何在 Inno Setup 中迭代 MULTI_SZ 字符串?

Java - Google App Engine - 不使用 Collections.sort() 对 ArrayList<Object> 进行排序

C - 可以提升变量位置吗?

c++ - 如何使变量值在 c/c++ 中的函数调用之间持久化

scripting - 嵌入帕斯卡