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. 字段优化
相关推荐
9523613 分钟前
Spring-cloud配置中心
java·spring·spring cloud·微服务
quantdash_cc17 分钟前
告别自建 Requests/BS4 网页爬虫:基于 QuantDash 搭建零维保的高性能量化行情流水线
开发语言·爬虫·python·pandas·量化·quantdash
ydd10010024 分钟前
寻找两个正序数组的中位数 Java 题解,二分分割详解
java·开发语言
半亩码田1 小时前
C#转Python第3.1篇:Python 的 class 没有访问修饰符?面向对象的另一条路
开发语言·python·c#
302wanger1 小时前
【阅读笔记】当AI拿走一切之后
笔记
真上帝的左手2 小时前
10. 软件设计&架构-Spring Security 7 整合CAS SSO 单点登录
java·spring·架构·sso
Wzx1980122 小时前
python沙箱和docker沙箱你选对了吗?
开发语言·python·docker
牧羊人.3332 小时前
Python 办公自动化从入门到入土|09 数据容器之字典
开发语言·python
Zane19942 小时前
单例线程安全、生产者消费者、死锁:并发面试三连问串讲
java·后端
小僧景贤2 小时前
嵌入式C语言 第二篇:基础语法|嵌入式C与标准C的核心差异
c语言·开发语言·嵌入式c语言