编译与解释并存的Java

由 Java 编写的程序需要先经过编译步骤,生成字节码(文件),这种字节码必须由 Java 解释器来解释执行。

  • 编译型: 通过编译器将源代码一次性翻译成 可被该平台执行的机器码。一般情况下,编译语言的执行速度比较快,跨平台性差。常见的编译性语言有 C、C++、Go、Rust 等等。
  • 解释型: 会通过解释器一句一句的将代码解释(interpret)为机器代码后再执行。解释型语言执行速度比较慢。常见的解释性语言有 Python、JavaScript、PHP 等等。

为什么说 Java 语言"编译与解释并存"?

由 Java 编写的程序需要先经过编译步骤,生成字节码(.class 文件),这种字节码必须由 Java 解释器来解释执行。

  • 常用的 java 编译模式是JIT(即时编译)即动态编译,在程序执行期间编译,因此支持反射、动态代理等特性。(Spring 生态很多就依赖的 java 的代理、反射特性)
  • JDK 9 引入了一种新的编译模式 AOT 。这种编译模式会在程序被执行前就将其编译成机器码 ,属于静态编译(C、 C++,Rust,Go 等语言就是静态编译)。AOT 避免了 JIT 预热等各方面的开销,可以提高 Java 程序的启动速度,避免预热时间长。并且,AOT 还能减少内存占用和增强 Java 程序的安全性(AOT 编译后的代码不容易被反编译和修改),特别适合云原生场景。
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计