当前位置: 首页 > 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.lryc.cn/news/573656.html

相关文章:

  • 关于CH32开发板烧录说明
  • 用可观测工具高效定位和查找设计中深度隐藏的bug
  • webpack+vite前端构建工具 -6从loader本质看各种语言处理 7webpack处理html
  • Linux内核中安全创建套接字:为何inet_create未导出及正确替代方案
  • SAP金属行业解决方案:无锡哲讯科技助力企业数字化转型与高效运营
  • Kafka Streams架构深度解析:从并行处理到容错机制的全链路实践
  • 针对数据仓库方向的大数据算法工程师面试经验总结
  • netcore url编码/解码
  • [计算机网络] 局域网内的网络传输
  • SpringBoot+Vue服装商城系统 附带详细运行指导视频
  • 3dgs涉及的基本概念:球谐系数(SH 系数)等
  • Python之数据容器
  • 【JavaScript】代码整理
  • vim学习流程,以及快捷键总结
  • Python 深度学习基础:TensorFlow 入门——从张量到神经网络的实战指南
  • 【2025年软考中级】第三章数据结构3.4 数组与矩阵
  • Flink作业三种部署模式:架构、配置与实战应用
  • rknn优化教程(三)
  • Bytemd@Bytemd/react详解(编辑器实现基础AST、插件、跨框架)
  • 【云原生】Docker 部署 Elasticsearch 9 操作详解
  • Git Worktree:高效开发的秘密武器
  • C# 数组(数组协变和数组继承的有用成员)
  • webpack+vite前端构建工具 - 8 代码分割
  • 【数据结构试题】
  • C#Halcon从零开发_Day13_几种阈值分割方法
  • 《高等数学》(同济大学·第7版)第五章 定积分 第四节反常积分
  • 目标检测neck算法之MPCA和FSA的源码实现
  • python实战项目77:足球运动员数据分析
  • React 18.2.0 源码打包
  • C++智能指针的知识!