怎么理解Java语言的编译期

本篇内容介绍了“怎么理解Java语言的编译期”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

成都服务器托管,成都创新互联公司提供包括服务器租用、资阳主机托管、带宽租用、云主机、机柜租用、主机租用托管、CDN网站加速、域名与空间等业务的一体化完整服务。电话咨询:028-86922220

Java语言的编译期其实是一段不确定的操作过程,因为它可能是指一个前端编译器(准确来说是编译器的前端)把.java文件转变成.class文件的过程;也可能是指虚拟机的后端运行期编译器(JIT编译器)把字节码转变成机器码的过程;还可能是使用静态提前编译器(AOT编译器)直接把.java文件编译成本地机器码代码的过程。

前端编译器:把.java源码文件,转化成字节码的.class文件。比如Sun的javac,Eclipse JDT中的增量式编译器(ECJ)。
JIT即时编译器:把字节码转变成机器码,比如Hotspot VM的C1、C2编译器。
AOT编译器:直接把.java文件编译成本地机器代码,比如GNU Compiler For Java(GCJ),Excelsior JET。

虚拟机设计团队把对性能的优化集中到了后端的即时编译器中,这样可以让那些不是由javac产生的class文件也能享受到编译优化带来的好处。但是javac做了许多针对Java语言编码过程中的优化措施来改善程序员的编码风格和提高编码效率。相当多新生的Java语法特性,都是靠编译器的语法糖来实现的,而不是依靠虚拟机的底层改进来支持。可以说,Java中即使编译器在运行期的优化过程对于程序运行来说更重要,而前端编译器在编译期的优化对程序编码来说关系更加密切。

Java语法糖

每种语言都会或多或少提供一些语法糖方便程序员的代码开发,这些语法糖虽然不会提供实质性的功能改进,但是他们或能提高效率,或能提升语法的严谨性,或能减少编码出错的机会。不过,也有观点认为语法糖并不一定是有益的,大量添加和使用含“糖”的语法,容易让程序员产生依赖。总之,语法糖可以看做是编译器的一些“小把戏”,使用它们可以使得效率得到提升,但我们也应该去了解它们背后的原理。

泛型与类型擦除

Java语言中的泛型则不同,它只存在于程序源码中,在编译后的字节码文件中已经替换为原生类型,并在相应的地方插入了强制转化代码。因此,对于运行期Java来说,ArrayList 和ArrayList是同一个类型,所以泛型技术实际上是Java 语言的一颗语法糖,这种泛型实现方法被称为类型擦除,基于这种方法实现的泛型称为伪泛型。但元数据中还是保留了泛型信息,这也是我们能通过反射手段取得参数化区类型的根本依据。如getGenericSuperclass()可以获得带有泛型的父类。

自动装箱、拆箱与遍历循环

从技术角度上讲,自动装箱、拆箱与遍历循环这些语法糖,虽然实现上和思想上都比泛型简单多了,但是它们是Java语言里使用最多的语法糖。

条件编译

Java 言里条件编译的实现,也是Java语言的一颗语法糖,根据布尔常量值的真假,编译器会把分支中不成立的代码块消除掉,这一工作将在编译器解除语法糖阶段完成。

“怎么理解Java语言的编译期”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


本文标题:怎么理解Java语言的编译期
本文地址:http://ybzwz.com/article/pegeoc.html