深入理解Java虚拟机 (10-编译期优化)
编译期优化
Java语法糖
泛型与类型擦除
泛型的本质是参数化类型(Parametersized Type)。
C#有自己的虚方法表和类型数据,这种实现称为类型膨胀,基于这种方法实现的泛型称为 真实泛型 。
Java语言中的泛型则不一样,它只在程序源码中存在,在编译后的字节码文件中,就已经替换为原來的原生类型(RawType,也称为裸类型)了,并且在相应的地方插入了强制转换代码。Java语者中的泛型实现方法称为类型擦除,基于这种方法实现的泛型称为 伪泛型 。
擦除法所谓的擦除,仅仅是对方法的Code属性中的字节妈进行擦除,实际上元数据中还是保留了泛型信息,这也是我们能通过反射手段取得参数化类型的根本依据。
条件编译
Java语言中条件编译的实现,也是Java语言的一颗语法糖,根据布尔常量值的真假,编译器将会把分支中不成立的代码块消除掉,这工作将在编译器解除语法糖阶段完成。由于这种条件编译的实现方式使用了if语句,所以它必须遵循最基本的Java语法,只能写在方法体内部,因此它只能实现语句基本块(Block)级别的条件编译,而没有办法实现根据条件调整整个Java类的结构。
转载请注明:转载自srzyhead的博客(https://srzyhead.github.io)
本文链接地址: 深入理解Java虚拟机 (10-编译期优化)