清晰解题: Java 是编译型语言还是解释型语言

版权声明:本文为博主学习笔记, 注明来源情况下随意转载 https://blog.csdn.net/lengxiao1993/article/details/80209793
  • Java 的跨平台运行能力的本质原因是, Java 会首先被编译为字节码(bytecode), 然后可以被不同平台的 JVM 解释成对应的机器码,得以运行。
  • 解释和 JIT 编译的区别:
    • 解释: JVM 运行时加载 .class 文件, 逐条读取其中的 bytecode , 将其转换为特定平台的 CPU 指令予以执行。 同一条指令被多次运行, 也会被多次解释, 指令解释的过程会耗费额外的时间。
    • JIT 编译: 一些会被反复调用的热点字节码, 经过编译后,会被优化精简为特定平台的 CPU 指令, 缓存起来, 这部分字节码再次被调用时, 可以直接运行, 省去解释的时间。
    • 总结: 解释和编译的区别在于, 前者在运行时刻, 逐条逐句按对应关系进行顺序翻译执行(无法根据上下文进行精简优化)。 编译会一次进行尽可能的优化和精简,将编译好的机器指令缓存起来,再次调用时可以直接运行
  • 常见的 JVM , 例如 Oracle JDK 提供的 Hotspot JVM 都提供了JIT 编译器, 将热点代码进行编译优化, 以缩短其执行的时间。 对于非热点代码, 因为运行次数少, 编译花费的时间可能比运行该指令的时间还长, 依旧采用解释运行的方法。 从这个角度来讲, Java 语言是编译和解释混合的语言。

猜你喜欢

转载自blog.csdn.net/lengxiao1993/article/details/80209793