早期(编译期)优化
java泛型
在java中,泛型方法在编译之后,生成的class文件里面保存的是原生类型。
晚期(运行期)优化
java程序最初是通过解释器进行解释执行的,当某个方法或者代码块的运行特别频繁时,就会将这些代码认定为热点代码。为了提高这些热点代码的执行效率,在运行时侯会将这些代码编译为和平台无关的机器码,并进行各种层次的优化,完成这个任务的编辑器被称为即时编译器
11.2HotSpot虚拟机内的即时编辑器
解释器与编译器
解释器:迅速启动和执行
编译器:将代码转化为本地代码,获取更高的执行效率
HotSpot虚拟机里面内置两个即时编译器,分别称为Client Compiler和Server Compiler
11.2.2编译对象和触发条件,在上文当中已经提到会被即时编译器编译的“热点代码主要分为两类”1,被多次调用的方法。2.被多次执行的循环体
判断一段代码是不是热点代码,是不是需要触发即时编译,这样的行为称为热点探测,主要由两种:
1,基于采样的热点探测:周期性的检查虚拟机的栈顶,若一个或者某些方法经常出现在栈顶
2,基于计数器的热点探测:建立计数器,设置阀值。
而Hotpost主要采用的时第二种--因此它为每个方法准备了两种计数器:方法调用计数器(client是1500次,server模式下是10000次)和回边计数器(他的作用是统计一个方法当中循环体代码执行的次数)
网友评论