Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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 如果JIT正在执行到机器指令的字节码转换,那么JVM的用途是什么_Java_Jvm_Jit - Fatal编程技术网

Java 如果JIT正在执行到机器指令的字节码转换,那么JVM的用途是什么

Java 如果JIT正在执行到机器指令的字节码转换,那么JVM的用途是什么,java,jvm,jit,Java,Jvm,Jit,我真的很难理解下面的事情 以前我知道: 编译Java程序时,将生成class文件。在这种情况下,代码的形式是字节。然后,JVM将把字节码翻译成机器可以理解的格式 现在我明白了 实时(JIT)编译器是运行时的一个特性 解释器,而不是每次一个方法 调用时,将字节码编译为机器码 运行机器的说明 所以这里JIT将字节码转换成机器指令。那么JVM的用途是什么呢。我们可以通过JIT实现这一点。据我所知,JIT只是为了提高JVM的性能。更清楚地说: JVM执行以下操作: 它位于操作系统的顶部并提供抽象 在编译

我真的很难理解下面的事情

以前我知道:

编译Java程序时,
将生成class
文件。在这种情况下,代码的形式是字节。然后,
JVM
将把字节码翻译成机器可以理解的格式

现在我明白了

实时(JIT)编译器是运行时的一个特性 解释器,而不是每次一个方法 调用时,将字节码编译为机器码 运行机器的说明

所以这里JIT将字节码转换成机器指令。那么JVM的用途是什么呢。我们可以通过JIT实现这一点。据我所知,JIT只是为了提高JVM的性能。

更清楚地说:

JVM执行以下操作:

它位于操作系统的顶部并提供抽象 在编译的java程序和操作系统之间。这边,java 编译后的程序不必担心它必须使用哪个平台 工作Java程序将代码编译成字节码,JVM可以 理解并执行

准时制

当JVM编译类文件时,它不会完成整个类 文件它只根据需要编译其中的一部分。这避免了沉重的负担 解析完整的源代码。这种类型的编译称为 JIT或即时编译。 JVM是依赖于平台(OS)的代码生成 JIT面向平台,生成本机字节码,因此比JVM更快:)


它通过优化为JVM及时编译它。

JIT只是JVM的一部分。其他部分包括字节码解释器、类加载验证和链接机制,以及对反射、I/O等内容的本机代码支持

从这个意义上讲,JIT根本不会使JVM运行得更快。相反,它使Java代码运行得更快。。。如果JVM只是对其进行解释,则情况会更糟

实际上,JVM确实是从解释字节码开始的。一段时间后,JVM然后使用其JIT编译器将大量使用的方法编译为本机代码,使用在解释时收集的统计信息来针对手头的问题调整代码

顺便说一句,你引用的这部分文字既笨拙又不准确:

实时(JIT)编译器是运行时解释器的一项功能


事实上,JIT不是解释器的一个特性。相反,JIT是与解释器一起工作的JVM的功能

Java虚拟机(JVM)提供了运行Java程序的整个环境。它与操作系统集成,加载类并运行程序。即时编译器(JIT)只是一个小部件,可以禁用(-Xint),但启用后,可以有效地提高性能。有一些JVM的实现不包括JIT,也有一些实现是通过将Java预编译为机器代码来工作的,就像传统语言一样,比如C或C++。< /p>但是我看到语句JIT编译了整个类文件。但是在你的语句中JVM正在编译。explain@Anusha是的…JVM做编译部分[逐行]是java的本机解释器。但是JIT是可选的,它也编译,而不是所有的东西,只是一个必要的方法/函数。例如,JIT编译器不检查java边界条件,例如空指针或数组越界异常。JIT编译器知道它有空指针异常的唯一方法是通过操作系统发出的信号。这是错误的。javac Java编译器解析Java源代码并将其编译为Java字节码(独立于机器),即.class文件。JIT编译器将字节码编译为本机代码(特定于CPU arch)。JIT输出机器代码仍然执行边界检查和Java异常处理。这里有白皮书或参考答案吗?我肯定有。如果你能找到它们,让我知道,我会添加它们。这并不能回答问题。