分层编译
JVM在执行的时候会把字节码转化为机械码
JVM将执行状态分成了5个层次
第0层:解释执行(Interpreter),只是单纯的把字节码转化为机械码
第1层:使用C1即时编译器编译执行(不带profiling)
即时编译器(JIT)将一些字节码转化为机械码,并存入Code Cache,下次遇到相同的代码就可以直接执行,不用像解释器一样重复解释
profiling:在运行过程中收集一些程序执行状态的睡觉,例如方法的调用次数,循环的次数等
第2层:使用C1即时编译器编译执行(带基本profiling)
第3层:使用C1即时编译器编译执行(带完全的profiling)
第4层:使用C2即时编译器编译执行
注意
解释器把字节码解释为所有平台都通用的机器码
即时编译器生成平台特定的机械码
逃逸分析(在c2)
在下列代码,创建的对象根本及没有在for循环外被调用,那么,c2编译器干脆就改变你的字节码,就不创建他
方法内联
把方法内的代码方法调用者的位置,还可以进行常量折叠
来源:CSDN
作者:今天又学java了
链接:https://blog.csdn.net/weixin_43907800/article/details/104027297