09-java虚拟机之编译期

概述

java语言的编译期其实就是一段不确定的操作过程,它可能是指一个前端编译器把.java文件转变成.class文件的过程,也可能是指后端运行期编译器(JIT编译器)把.class转变成机器码的过程,还有可能是指静态前端编译器(AOT编译器)直接把.java转变成机器码的过程

1.三类编译期-编译器

  1. 前端编译器:Sun的javac、ECJ ——“.java转变.class”
  2. JIT编译器:HotSpot VM的C1、C2编译器 ——“.class转变机器码”
  3. AOT编译器:GCJ、JET —— “.java转变机器码”

  上面这三类最符合大家对java程序编译认知的应该是第一类,像第一类javac前端编译器对代码的运行效率几乎没有任何优化措施,虚拟机设计团队把对性能的优化集中到了后端的即时(JIT)编译器中,这样的话可以让那些不是由javac生产的.class文件(如JRuby、Groovy等语言的Class文件)也同样能享受到编译器优化所带来的好处,javac做了许多针对语言编码过程的优化措施来改善程序员的编码风格和提供编码效率。

2.语法糖

  相当多新生的java语法特性,都是靠java即时(JTI)编译器的“语法糖”来实现,而不是依赖虚拟机的底层改进来支持,这种语法对语言的功能并没有影响,但是方便程序员使用,语法糖还有对应的解语法糖,因为虚拟机不支持这些语法,它们在编译阶段会还原成基本的语法结构,让虚拟机运行,这个过程就是解语法糖。

  几乎各种语言或多或少都会提供语法糖给程序员使用,这些语法糖虽然不会提供实质性的功能改进,但是他们或能提高效率、或能提高语法的严谨性、或能减少编码出错的机会。

参考:

《深入理解java虚拟机》

你可能感兴趣的:(jvm)