分类: Java
2013-09-29 11:48:34
1. 许多主流的商用虚拟机都采用 解释器和编译器并存的架构,解释器与编译器各有优势:当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。当程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成为本地代码之后,可以获得更高的执行效率。
当程序运行环境中内存资源限制较大,可以解释执行节约内存,反之可以用编译执行来提升效率。
2.被编译的代码有两类:被多次调用的方法、被多次执行的循环体
方法调用触发的编译,编译器理所当然会以整个方法作为编译对象,这种编译也是虚拟机中标准的编译方式。
由循环体触发的编译是由循环体触发的,但编译器也会以整个方法作为编译对象,这种编译方法因为发生在执行过程之中,因此被形象地称为栈上替换(OSR)。
3.知不知道一段代码是不是热点代码,是不是需要出发即时编译,这个行为叫热点探测。
4.目前热点探测判定方式:基于采样的热点探测,采用这种方法的虚拟机会周期性的检查各个线程的栈顶,如果发现某个或某些方法经常出现在栈顶,那这个方法就是热点方法;
基于计数器的热点探测方法:采用这种方法的虚拟机会为每个方法建立计数器统计方法执行的次数,如果执行方法超过一定次数,则它就是热点方法。
5.在hotspot虚拟机中使用第二种方法--基于计数器热点探测的方法。它为每个方法准备了两个计数器:方法调用计数器和回边计数器。
在字节码中遇到控制流向后跳转的指令就称为“回边”,显然建立回边计数器统计的目的就是为了触发OSR编译。