运行期优化

一曲冷凌霜 提交于 2020-01-18 12:41:00

分层编译

JVM在执行的时候会把字节码转化为机械码
JVM将执行状态分成了5个层次

第0层:解释执行(Interpreter),只是单纯的把字节码转化为机械码

第1层:使用C1即时编译器编译执行(不带profiling)
即时编译器(JIT)将一些字节码转化为机械码,并存入Code Cache,下次遇到相同的代码就可以直接执行,不用像解释器一样重复解释
profiling:在运行过程中收集一些程序执行状态的睡觉,例如方法的调用次数,循环的次数等

第2层:使用C1即时编译器编译执行(带基本profiling)

第3层:使用C1即时编译器编译执行(带完全的profiling)

第4层:使用C2即时编译器编译执行

注意
解释器把字节码解释为所有平台都通用的机器码
即时编译器生成平台特定的机械码
在这里插入图片描述

逃逸分析(在c2)

在下列代码,创建的对象根本及没有在for循环外被调用,那么,c2编译器干脆就改变你的字节码,就不创建他
在这里插入图片描述

方法内联

把方法内的代码方法调用者的位置,还可以进行常量折叠
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!