Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么需要虚拟机来执行java程序。?_Java - Fatal编程技术网

为什么需要虚拟机来执行java程序。?

为什么需要虚拟机来执行java程序。?,java,Java,为什么Java代码在JVM中运行(Java代码->字节代码->机器代码)。为什么它不能像“C”那样直接编译成本机代码呢?以使Java代码独立于平台 已更新 如果一个C程序是在一个特定的平台上编译的,那么它将生成只能在编译它的平台上运行的编译代码。在windows计算机上编译的C程序不能在Linux/Unix/MacOS计算机上运行 Java的主要设计目标之一是使代码独立于平台。 这是通过在代码编译和代码执行之间添加额外的步骤来实现的。这是生成“字节码”的步骤 编译一个Java程序会产生所谓的“字

为什么Java代码在JVM中运行(Java代码->字节代码->机器代码)。为什么它不能像“C”那样直接编译成本机代码呢?

以使Java代码独立于平台

已更新
如果一个C程序是在一个特定的平台上编译的,那么它将生成只能在编译它的平台上运行的编译代码。在windows计算机上编译的C程序不能在Linux/Unix/MacOS计算机上运行

Java的主要设计目标之一是使代码独立于平台。 这是通过在代码编译和代码执行之间添加额外的步骤来实现的。这是生成“字节码”的步骤

编译一个Java程序会产生所谓的“字节码”文件,扩展名为.class。字节码实际上包含可由Java虚拟机解释的指令。也就是说,“javac”将Java程序转换为JVM可以理解的一组指令

JVM-Java虚拟机,运行在操作系统之上,分别为每个平台(操作系统和底层硬件)实现


通过这种设计,可以在Windows机器上编译Java程序,并在Linux机器上运行生成的.class文件,从而实现平台独立性。

因为这样可以为具有定义的体系结构和指令集的JVM实现Java。不同的机器可以有自己的JVM,Java程序可以在其上执行,而不必担心JVM运行的机器。此外,JVM中还添加了许多优化。

因为任何具有JVM实现的机器都可以运行任何编译成Java字节码的程序(理论上)。Java字节码还充当不同语言可以编译成的更高级语言。当然,不同的语言可以编译成相同的机器代码,但这将编译后的代码绑定到一种机器类型,而不是非机器特定的字节码


JVM实现还负责机器特定的细节,而不是应用程序程序员。这允许Java代码消除通常使用c/c++中的预处理器解决的32/64位代码变体

虽然这涉及到好处,但远不是一个完整的答案。请详细说明那一点。希望它能带来好处。