2012-04-20 70 views
2

Java如何被解释和编译?在编译和解释之间创建.class文件时也是如此。何时创建.class文件?

+1

[This](http://www.javaworld.com/javaworld/jw-07-1996/jw-07-classfile.html)可能会有帮助。 – sgowd 2012-04-20 11:25:06

+0

@ sans481这对我真的很有帮助。非常感谢。 – theJollySin 2012-04-21 05:35:45

回答

3

简单的答案是Java解释器使用.class文件作为输入,.class文件是Java虚拟机“硬件”的机器对象代码。 javac编译器会将.java源代码编译为.class对象,然后JavaVM可以执行(解释)这些对象。

+0

我们是否失去了很多可以在任何机器上执行的性能力编写代码?我做了很多Fortran,我觉得我不得不担心我的机器和计算集群的特定体系结构以获得良好的性能(关于运行时速度)。 – theJollySin 2012-04-21 05:30:27

+0

任何时候当你在需要运行的代码和硬件之间放置额外的软件时,都会有一些性能损失;多少取决于您使用的特定JVM。有些JVM非常简单,每次看到它时都需要重新解释每条指令。有些使用“JIT”(即时编译)将指令转换为本地代码,以在运行时获得性能。其他人执行“AOT”(提前编译)以获得更大的性能提升。但是,在每种情况下,虚拟机都会有一些开销。 – mah 2012-04-21 10:46:35

+1

这里还有其他一些关于效率的考虑,它不是直接由使用Java语言引起的。术语“Java”用于描述语言和运行时环境,但是可以将Java编译为本机代码(例如使用GNU的gcj编译器),并且可以使用其他语言编译为.class文件以供执行在JVM中。 – mah 2012-04-21 10:48:55

0

创建.class文件是编译步骤,所以两者之间没有任何关系。

.java文件被编译为存储在.class文件中的字节码。 .class文件由JRE解释。

1

创建类文件时?

Answer-> 编译器启动编译时生成的类文件,当时解释器(JRE)生成类文件。解释器将我们的编码解码为二进制编码(机器语言),并且此二进制编码被我们的系统或任何系统(机器)使用,或者我们可以说任何操作系统,如linux,ubntu,windows,fadora。

+0

我不认为运行时环境正在生成任何类文件。 [Java编程语言编译器](https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html)。 – skubski 2017-11-29 11:27:58