当前位置: 首页 > news >正文

【学习笔记】深入理解Java虚拟机学习笔记——第11章 后端编译与优化

第11章 后端编译与优化

11.1 概述

11.2 即时编译器

11.2.1 解释器与编译器

C1客户端编译器:优化力度小,编译快
C2服务端编译器:优化力度大,编译慢
解释器会在解释执行时收集运行数据供编译使用,以上各行为是否存在与占比情况由运行参数与版本决定

11.2.2 编译对象与触发条件

热点代码:多次调用的方法,多次执行的循环体(也会编译方法体,栈上替换)
热点代码探测方式:
1>基于采样的热点探测:周期检查各线程调用栈,经常出现在栈顶则为热点代码
优点:易于获得调用栈信息
缺点:易受阻塞扰乱热点探测
2>基于计数器的热点探测:为每个方法建立调用计数器
优点:统计调用次数准确
缺点:不能获取调用关系
Hotspot虚拟机使用第二种计数器,方法调用与循环都有各自的计数器(默认C1 1500次,C2 10000次)【可配置】
【一个方法调用时,先查看是否有编译后的版本,有则执行。无则计数器+1,达到阈值后提交一个该方法编译请求,然后继续调用解释器执行方法,编译成功后会通过编译后的代码执行。若方法一段时间内还未达热点,会减少一般调用次数统计】
回边计数:阈值计算(C1默认 13995,C2默认10700)
若存在已编译版本则执行,否则计数器+1且判断是否达到阈值,打到发送编译请求,并将回边计数减小,继续执行。
回边计数溢出时,会把方法调用计数一并溢出。

11.2.3 编译过程

客户端:三段式,重点关注局部优化而放弃全局优化
服务端:优化强度堪比c++ -02参数(无用代码消除、循环展开等…)

http://www.lqws.cn/news/484093.html

相关文章:

  • python+uni-app基于微信小程序的儿童安全教育系统
  • linux-vim编辑器
  • RA4M2开发IOT(6)----涂鸦模组快速上云
  • RA4M2开发IOT(10)----集成LPS22DF气压计
  • FPGA故障注入测试软件使用指南
  • 文心一言(ERNIE Bot):百度打造的知识增强大语言模型
  • jenkins对接、jenkins-rest
  • Rust智能指针演进:从堆分配到零复制的内存管理艺术
  • (双指针)283. 移动零
  • [踩坑] vmware 虚拟机卡片全灰, 开机没反应
  • 用 Python 绘制动态方块热力图:从数据到可视化的完美蜕变
  • 【51单片机】串口通信
  • 使用FastMCP开发MCP服务简单尝试
  • 云原生/容器相关概念记录
  • uni-app项目实战笔记20--触底加载更多样式的实现
  • PyTorch 入门学习笔记
  • margin-block-start定义元素在块级流方向起始边缘的外边距
  • 3516cv610在vi、vpss模块做延时优化
  • 【设计模式】策略模式 在java中的应用
  • 安卓jetpack compose学习笔记-Navigation基础学习
  • 使用css做出折叠导航栏的功能
  • 【appium】5. Appium WebDriver 支持的常用方法汇总
  • Flink源码阅读环境准备全攻略:搭建高效探索的基石
  • 基于Docker本地化搭建部署Dify
  • CSS Background 相关属性详解 文字镂空效果
  • springboot企业级项目开发之项目测试——集成测试!
  • Idea/Pycharm用法总结
  • 安卓官方版fat-aar:使用Fused Library将多个Android库发布为一个库
  • 机器学习:特征向量与数据维数概念
  • 从代码学习深度强化学习 - Actor-Critic 算法 PyTorch版