Java中的编译过程

Java中的编译过程,java,compilation,binary,executable,Java,Compilation,Binary,Executable,编译过程需要将源代码翻译成机器语言 到目前为止,我已经提到了.java文件(源代码)和.exe文件(0和1) >, > class文件的目的是什么?这似乎在整个过程的中间? 我们已经有了来自java源代码的可执行文件,它们不依赖于这些.class文件 我知道.class文件也是在编译后创建的,但它们的内容(我不知道)与.exe文件不同,因为它们只能使用java编译器运行,而不能像可执行文件那样作为独立应用程序运行 谢谢大家! Java被创建为独立于平台。类文件包含JVM(Java虚拟机)代码,

编译过程需要将源代码翻译成机器语言

到目前为止,我已经提到了.java文件(源代码)和.exe文件(0和1)

<> >,<强> > class文件的目的是什么?这似乎在整个过程的中间? 我们已经有了来自java源代码的可执行文件,它们不依赖于这些.class文件

我知道.class文件也是在编译后创建的,但它们的内容(我不知道)与.exe文件不同,因为它们只能使用java编译器运行,而不能像可执行文件那样作为独立应用程序运行


谢谢大家!

Java被创建为独立于平台。类文件包含JVM(Java虚拟机)代码,而不是.exes中的普通机器代码。JVM是理想化的,具有实际处理器所不具备的特性,但它没有Java语言本身复杂,是特定于平台的硬件之上的抽象层

当Java程序运行时,JVM解释Java字节码,以便它可以在CPU上实际运行。最初的javac编译使JVM不必在执行时编译整个程序并影响性能,而抽象使代码可以在安装JVM的任何地方运行

这与.exe文件不同,后者直接包含特定于平台的机器代码。Windows本身提供的抽象功能可以防止出现问题,但由于代码仍然是特定于平台的,因此无法在非Windows系统上工作,并且32位和64位系统有单独的版本(当然,除非是模拟器)


与直接加载机器代码的.exe文件相比,JVM执行的字节码解释仍然非常昂贵。因此,如果调用了足够多的部分代码,JIT(即时编译器)将启动并直接将JVM代码编译为特定于平台的机器代码,并将其存储在内存中,以提高这些活动区域的性能。如果这部分代码使用得足够多,JIT也会对代码进行优化,因为它可以对正在运行的代码运行评测,所以它可以根据假设对代码进行优化。这就是为什么许多大型Java程序在开始更高效地工作之前都有一段预热时间。

Java被创建为独立于平台的。类文件包含JVM(Java虚拟机)代码,而不是.exes中的普通机器代码。JVM是理想化的,具有实际处理器所不具备的特性,但它没有Java语言本身复杂,是特定于平台的硬件之上的抽象层

当Java程序运行时,JVM解释Java字节码,以便它可以在CPU上实际运行。最初的javac编译使JVM不必在执行时编译整个程序并影响性能,而抽象使代码可以在安装JVM的任何地方运行

这与.exe文件不同,后者直接包含特定于平台的机器代码。Windows本身提供的抽象功能可以防止出现问题,但由于代码仍然是特定于平台的,因此无法在非Windows系统上工作,并且32位和64位系统有单独的版本(当然,除非是模拟器)


与直接加载机器代码的.exe文件相比,JVM执行的字节码解释仍然非常昂贵。因此,如果调用了足够多的部分代码,JIT(即时编译器)将启动并直接将JVM代码编译为特定于平台的机器代码,并将其存储在内存中,以提高这些活动区域的性能。如果这部分代码使用得足够多,JIT也会对代码进行优化,因为它可以对正在运行的代码运行评测,所以它可以根据假设对代码进行优化。这就是为什么许多大型Java程序在开始更高效地工作之前都有一段预热时间。

非常有用的信息!非常有用的信息,谢谢!非常感谢。