周志明先生所著的《深入理解Java虚拟机:JVM高级特性与最佳实践》(购买地址:亚马逊链接),对我学习Java、理解Java之道有非常大的帮助。至今已读过两遍,为了能够融会贯通,加深记忆(人老了记忆力差),便在Blog上记录一些认为该记的东西。
Java语言的“编译期”是一段“不确定”的过程,因为它可能是指一个前端编译器(如HotSpot的javac)把*.java文件转变成*.class文件的过程;也可能是只虚拟机的后端运行期编译器(Just In Time编译器)把字节码转变成机器码的过程;甚至还可能是指使用静态提前编译器(AOT,Ahead Of Time编译器)直接把*.java转化为本地机器码的过程。
对于Javac这类编译器,在编译期对代码的运行效率几乎没有任何优化措施。但是Javac做了许多针对编码过程的优化措施来改善程序员的编码风格和提高编码效率。相当多新生的Java语法特性,都是靠编译器的“语法糖”来实现,而不是依赖虚拟机的底层改进来支持。可以说,Java中即时编译器(JIT)在运行期的优化过程对于程序运行来说更重要,而前端编译器在编译期的优化过程对于程序编码来说关系更加密切。
//TODO javac编译器分析
语法糖
泛型与类型擦除
泛型是JDK1.5的一项新特性,它的本质是参数化类型(Parameterized Type)的应用,也就是说操作的数据类型被指定为一个参数。这中参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。
泛型技术在C#和Java之中的使用方式看似相同,但实现上却有着根本性的分期,C#里面的泛型无论在程序源码中、编译后的IL中还是运行期间的CLR中都是切实存在的,List<int>与List<String>就是两个不同的类型,它们在系统运行期生成,有自己的虚方法表和类型数据,这种实现称为类型膨胀,基于这种方法实现的泛型被称为真实泛型。
Java语言中的泛型则不一样,它只在程序源码中存在,在编译后的字节码文件中,就已经被替换为原来的原生类型(Raw Type,也称为裸类型)了,并且在相应的地方插入了强制转型代码,因此对于运行期的Java语言来说,ArrayList<Integer>与ArrayList<String>就是同一个类。所以泛型技术实际上是Java语言的一颗语法糖,Java语言中的泛型实现方式称为类型擦除,基于这种方法实现的泛型被称为伪泛型。
代码Map<String,String> map=new HashMap<String,String> ();经过编译成class文件后,将其反编译,可以看到反编译后的代码变为Map map=new HashMap (),泛型类型都变为了原生类型。
自动装箱、拆箱与遍历循环
这几个是Java语言里面被使用得最多的语法糖。
publicstaticvoid main(String[] args) {
//自动装箱拆箱的陷阱
Integer a=1;
Integer b=2;
Integer c=3;
Integer d=3;
Integer e=321;
Integer f=321;
Long g=3L;
System.out.println(c==d);//
System.out.println(e==f);//
System.out.println(c==(a+b));//
System.out.println(c.equals(a+b));//
System.out.println(g==(a+b));//
System.out.println(g.equals(a+b));//
}
相关推荐
编译原理课程笔记 很好很强大 内容细致 清晰 适合初学此课程的童鞋 狂顶 给力
详细介绍了mysql的优化方法,资料包里包含word文档,ppt和图片
sqlserver优化笔记,自己无聊的时候整理的一些优化笔记
C语言-编译预处理_笔记,tex制作,共享出来一起学习。
深度学习最优化笔记,利用梯度(微分)求取最低谷点,损失函数包括数据顺势和正则化损失
编译原理笔记个人手写整理.pdf
中科大凸优化_笔记
Mysql数据库的优化技术 对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引] c: 分表技术(水平分割、垂直分割)...
操作系统级 CPU 目前大部分CPU在同一时间只能运行一个线程,超线程的处理器可以在同一时间处理多个线程,因此可以利用超线程特性提高系统性能。 在linux系统下只有运行SMP内核才能支持超线程,但是安装的CPu数量越...
凸优化笔记复习期末考试精简
里面结合了我整理的笔记希望对大家有用,请大家多多支持
凸优化视频第九节缺失 以下为学内容1凸函数定义函数f是凸函数 当f的定义域 5是凸集 且 以 2ES1- 0xzkofcx it 401fx严格凸函数以1-0加
优化笔记为一款小型绿色软件,可以自由拷贝到任何机器上使用,所用数据库为Access,您可以通过按装微软Office办公软件里的Aceess自由打开查看修改复制里面的数据,无需担心你的日记被破坏或丢失。数据库存放在软件根...
服务器集群及优化笔记
官方Uboot编译与实验笔记
哈工大编译原理复习笔记
凸优化课程重点笔记,对于学习凸优化帮助非常大。
最优化笔记.pdf
反编译学习笔记,本人初学反编译时做的笔记