java - 当Java平台需要运行JVM时,它是如何独立的?

  显示原文与译文双语对照的内容
120 1

我刚开始学习 Java,我对平台无关性的话题感到困惑。

"独立"不意味着Java代码应该在任何机器上运行,不需要安装特殊的软件?然而,JVM需要出现在机器中。

例如,我们需要使用and编译器来编译 C/C++ 源代码,然后执行它。这台机器必须有C 编译器。

有人可以please当Java被描述为"平台独立"时是什么意思 is?

时间:原作者:0个回答

112 3

通常,编译的代码是CPU需要"执行"程序的精确指令集。在Java中,编译的代码是一组针对"虚拟 CPU"的精确指令,它们在每个物理机上都是相同的。

从某种意义上说,Java语言的设计者决定语言和编译的代码是独立的。

对JVM的这一需求与你的Turbo C 示例相反。编译器将生成平台依赖代码,并且不需要JVM工作,因为编译的Turbo C 程序可以以直接执行。

使用 Java,CPU执行 JVM,这是平台依赖的。然后,运行JVM执行平台独立的Java字节码,假设你有一个可以用于它的JVM 。你可以能会说,编写Java代码,不要编写在物理机上执行的代码,而是编写在Java虚拟机上执行的代码。

所有Java虚拟机在所有Java虚拟机上工作的唯一方法是编写一个相当严格的Java虚拟机。这意味着无论你使用什么物理平台,Java字节码接口都保证只有一种方式使用 JVM 。由于所有的jvm完全相同,同样的代码在任何地方都完全相同,没有重新编译。如果不能通过测试以确保它的相同,则不允许将虚拟机调用为"java虚拟机"。

当然,有一些方法可以破坏Java程序的可移植性。你可以编写一个程序,查找只在一个操作系统( cmd.exe 例如) 上找到的文件。可以使用 JNI,它有效地允许将编译过的C 或者 C++ 代码放入类中。你可以使用仅适用于特定操作系统( 假设":"分隔目录)的约定。但是,除非你正在做特殊的( 像 JNI ),否则你绝对不必为它的他机器重新编译程序。

原作者:
94 3
 Technical Article on How java is platform indepedent?

首先,你必须了解平台的平均值是什么。平台由计算机硬件( 主要是微处理器的结构) 和操作系统组成。Platform=hardware+Operating系统

任何平台indepedent都可以在任何操作系统和硬件上运行。

Java是平台 indepedent,所以Java可以在任何操作系统和硬件上运行。现在问题是platform平台是如何独立的?

这是因为字节代码的魔力,它是操作系统 indepedent 。当java编译器编译任何代码时,它生成的字节代码不是机器本机代码( 与C 编译器不同) 。现在这个字节码需要一个解释器来在机器上执行。这个解释器是 JVM,所以JVM会读取 byte code(that is machine indepedent) 并执行它。不同的JVM是针对不同的操作系统而设计的,而字节码可以在不同的操作系统上运行。

如果C 或者 C++ ( 非平台indepedent的语言) 编译器生成操作系统 depedent,那么在另一个操作系统上运行这个. exe 文件,因为这个文件与另一个操作系统不兼容,所以不能运行。

finally 一个中间操作系统indepedent字节代码使java平台独立。

原作者:
114 3

这意味着Java程序员不需要知道机器或者操作系统细节。这些细节确实存在,JVM和类库处理它们。而且,与C 相比,Java二进制文件( 字节码) 通常可以在不修改或者重新编译的情况下移动到完全不同的系统。

原作者:
...