我读到,java源代码被编译成‘字节码’,然后JIT又把它‘编译’成‘机器代码’。也就是说,源代码首先编译成独立于平台的字节码,然后再编译成机器特定的代码。那么为什么它被称为解释语言和编译语言呢?解释在哪里进行的?
发布于 2014-01-02 10:25:12
这里有点误会。
在正常情况下,java编译器(javac
)将java代码编译成字节码,java解释器(java
)则对这些字节码(逐行)进行解释,并将其转换为机器语言并执行。
JIT(Just in time)
编译器的概念有点不同。JVM维护函数执行次数的计数。如果它超过了极限,那么JIT就会出现在画面中。java代码直接编译成机器语言,并在此基础上执行该函数。
发布于 2014-01-02 10:25:30
Java是一种编程语言。
它有一个规范( JLS),它定义了Java程序应该如何工作。
作为一种语言本身,它没有指定应该如何在不同的平台上执行。它的运行方式,无论是使用JIT还是不使用JIT,都是完全基于实现的。
许多其他语言都这样做:
发布于 2014-01-02 10:25:30
为了精确起见,让我们明确这不是一个Java编程语言问题,而是一个JVM特性。
在JVM最初的实现中,JIT不存在,字节码总是被解释。这是由于一项设计决定,即使编译后的代码独立于运行java的物理机器和操作系统,直到今天仍然有效。
作为以后的改进,JIT是在JVM实现中引入的,以获得更快的执行速度,但是字节码必须仍然有效,并在转换为二进制文件之前通过所有验证。这样,您就可以保持平台的独立性、所有的健全性和安全性检查,从而获得性能。
https://stackoverflow.com/questions/20880716
复制相似问题