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. 字段优化
相关推荐
蜡笔小电芯7 分钟前
【CAN总线】STM32 的 CAN 总线通信开发笔记(基于 HAL)
笔记·stm32·单片机
golitter.12 分钟前
python中的 @dataclass
开发语言·python
一枚小小程序员哈22 分钟前
基于springboot的零食商城的设计与实现/零食销售系统的设计与实现
java·spring boot·spring·tomcat·maven
LiuYiCheng12345625 分钟前
WebCrawler库:从网页抓取到智能处理的Python利器
开发语言·python
qqxhb25 分钟前
零基础数据结构与算法——第六章:算法设计范式与高级主题-设计技巧(上)
java·数据结构·算法·分解·空间换时间·时空平衡
野生技术架构师41 分钟前
系统改造:一次系统领域拆分的实战复盘
java·大数据·开发语言
南玖yy1 小时前
C++多态:面向对象编程的灵魂之
运维·开发语言·数据库·c++·后端·c·c语音
一碗绿豆汤1 小时前
JAVA+AI教程-第四天
java·开发语言·人工智能
YuTaoShao1 小时前
【LeetCode 热题 100】34. 在排序数组中查找元素的第一个和最后一个位置——二分查找
java·数据结构·算法·leetcode
典孝赢麻崩乐急1 小时前
Java学习-----如何创建线程
java·学习