12、jvm运行期优化

运行期优化:

jvm将执行状态分成五个层次

(1)0层,解释执行(Inrerpreter)

(2)1层,使用c1即时编译器编译执行(不带profiling)

  1. 2层,使用c1即时编译器编译执行(带基本的prodiling)
  2. 3层,使用c1即时编译器编译执行(带完全的profiling)
  3. 4层,使用c2即时编译器编译执行

profiling是指在运行过程中收集一些程序执行状态的数据,例如:方法调用次数,循环的回边次数等

即时编译器(JIT)与解释器的区别

  1. 解释器是将字节码解释为机器码,下次即时遇到相同的字节码,仍会执行重复的解释
  2. JIT是将一些字节码编译为字节码,并存入Code Cache,下次遇到相同的代码,直接执行,无需再编译
  3. 解释器是将字节码解释为针对所有平台都通用的机器码
  4. JIT会根据平台类型,生成平台特定的机器码

对于占据大部分的不会常用的代码,我们无需耗费时间将其编译成机器码,而是采取解释执行的方式运行,另一方面,对于占据小部分的热点代码,我们则可以将其编译成机器码,以达到理想的运行速度。执行效率简单比较一下Interpreter<c1<c2,总的目标就是发现热点代码(hostpot名称的由来),

    1. 分层编译
    2. 逃逸分析
    3. 方法内联:如果发现是热点方法,并且长度不会太长,会进行内联,所谓内联就是把方法内代码拷贝,粘贴到调用者的位置
    4. 字段优化
相关推荐
ALex_zry7 分钟前
深入解析gRPC C++动态反射:实现Proto消息的智能字段映射
开发语言·c++
幸运小圣19 分钟前
for...of vs for 循环全面对比【前端JS】
开发语言·前端·javascript
liu****21 分钟前
12.线程同步和生产消费模型
linux·服务器·开发语言·c++·1024程序员节
学习编程的Kitty36 分钟前
JavaEE初阶——多线程(5)单例模式和阻塞队列
java·开发语言·单例模式
m0_3722570236 分钟前
项目下有多个模块,每个模块有pom文件,是怎么继承的
java·tomcat
oak隔壁找我1 小时前
Spring AI 入门教程,使用Ollama本地模型集成,实现对话记忆功能。
java·人工智能·后端
懒羊羊不懒@1 小时前
JavaSe—Stream流☆
java·开发语言·数据结构
郝开1 小时前
最终 2.x 系列版本)2 - 框架搭建:pom配置;多环境配置文件配置;多环境数据源配置;测试 / 生产多环境数据源配置
java·spring boot·后端
闲人编程1 小时前
构建一个短链接生成器服务(FastAPI + SQLite)
jvm·python·sqlite·fastapi·生成器·短链接·caodecapsule
Js_cold1 小时前
(* clock_buffer_type=“NONE“ *)
开发语言·fpga开发·verilog·vivado·buffer·clock