JVM JIT编译器优化技术有近100中,其中最最重要的方式就是内联(inlining)。 方法内联可以省掉方法栈帧的创建,方法内联还使让JIT编译器更多更深入的优化变成可能。
Inlining相关的启动参数
jvm可以通过两个启动参数来控制字节码大小为多少的方法可以被内联:
-XX:MaxInlineSize:能被内联的方法的最大字节码大小,默认值为35B,这种方法不需要频繁的调用。比如:一般pojo类中的getter和setter方法,它们不是那种调用频率特别高的方法,但是它们的字节码大小非常短,这种方法会在执行后被内联。
-XX:FreqInlineSize:调用很频繁的方法能被内联的最大字节码大小,这个大小可以比MaxInlineSize大,默认值为325B(和平台有关,我的机器是64位mac)
可见,要想inlining就要让你的方法的字节码变得尽可能的小,默认情况下,你的方法要么小于35B(针对普通方法),要么小于325B(针对调用频率很高的方法)。
Inlining调优的工具
同样的上一篇博客《Java JIT性能调优》中也介绍了非常牛x的JIT优化工具JITWatch,该工具的详细文档请看这里:https://github.com/AdoptOpenJDK/jitwatch
1.把分支语句中的代码段抽取到方法中
2.移除无用的代码
3. 抽取重复的代码
4.优化常量加减运算
5.移除无用的初始化赋值
6.尽量复用临时变量
7.把多个if判断转变成map的contain或者数组取下标操作

内联(inlining)相关推荐

  1. 《Java 核心技术卷1 第10版》学习笔记------ 组织继承:final类和方法【编译器优化:内联( inlining );】

    使用 final 关键字阻止继承 有时候,可能希望阻止人们利用某个类定义子类.不允许扩展的类被称为 final 类.如果在定义类的时候使用了 final 修饰符就表明这个类是 final 类. 例如, ...

  2. go 基准测试 找不到函数_Go 中的内联优化 | Linux 中国

    本文讨论 Go 编译器是如何实现内联的,以及这种优化方法如何影响你的 Go 代码.https://linux.cn/article-12176-1.html作者:Dave Cheney译者:Xiaob ...

  3. 内联函数和编译器对Go代码的优化

    什么是内联函数 图片版权:Renee French. 在很多讲 Go 语言底层的技术资料和博客里都会提到内联函数这个名词,也有人把内联函数说成代码内联.函数展开.展开函数等等,其实想表达的都是 Go ...

  4. 内联函数 inline

    inline 函数 :对此函数的每一个调用 都以 函数本体 替换之 [1]简介 : inlining函数通常一定被置于头文件内,因为大多数建置环境 在 编译过程 中 进行 inlining行为inli ...

  5. kotlin内联函数_Kotlin内联函数,参数化

    kotlin内联函数 In this tutorial, we'll be looking into Kotlin inline function. We'll follow that with Re ...

  6. 内联函数什么时候展开_内联函数

    内联函数什么时候展开 You know all of those Util files you create with all sorts of small functions that you en ...

  7. 读书笔记 effective c++ Item 30 理解内联的里里外外 (大师入场啦)

    正文 最近北京房价蹭蹭猛涨,买了房子的人心花怒放,没买的人心惊肉跳,咬牙切齿,楼主作为北漂无房一族,着实又亚历山大了一把,这些天晚上睡觉总是很难入睡,即使入睡,也是浮梦连篇,即使亚历山大,对C++的热 ...

  8. Go :使用编译器诊断标志测试内联是否有效(附完整源码)

    Go :使用编译器诊断标志测试内联是否有效 package fooimport ("runtime""unsafe" )func add2(p *byte, n ...

  9. android内联优化导致Inlined method resolution crossed dex file boundary

    最近App在android11上出现了一个诡异的native 崩溃,很不容易出现,但都是有个特点就是安装App后过一段时间才会出现,杀进程没用,覆盖安装同一个apk,崩溃立刻消失,日志为如下: 124 ...

最新文章

  1. 这样设计订单系统,同事直呼 666!
  2. AbstractFactory抽象工厂模式
  3. walle(瓦力)部署系统的安装和简单使用
  4. Linux如何指向mysql_linux的基本操作(mysql 的基本操作)
  5. 一分钟学会Git操作流程
  6. appium 设置参数
  7. PID控制器开发笔记之九:基于前馈补偿的PID控制器的实现
  8. RecycleView添加setEmptyView
  9. mysql 中if(),left(),right(),with rollup的用法
  10. el captain设置环境变量
  11. Android eclipse sdk包升级
  12. Linux内核部件分析 设备驱动模型之driver
  13. Windows 10 RTM 官方正式版
  14. SQL语句一对多查询
  15. 实现手风琴抽屉式网页特效
  16. Firefox定位网页元素工具
  17. 注意力(Attention)
  18. win10多台计算机共享文件夹设置密码,win10系统给共享文件夹设置密码的操作方法...
  19. 北大英语系计算机系,北京大学
  20. word论文排版和写作04:用MathType和word公式编辑器插入数学公式

热门文章

  1. windows 2000/XP/2003服务全集
  2. Out of range value for column
  3. 官宣:无极SR4 Max,350AC发布
  4. cad2020卸载工具_2020年您应该拥有的12个自由职业者设计工具
  5. 猿创征文|收到谷歌开发者大会正式邀请(Java学生的自学之路)
  6. 正则表达式练习题(含答案)
  7. python-基础语法-glob.glob()
  8. 从零开始写JavaScript框架(一)
  9. 2022年外地高新技术企业迁入迁移湖北武汉奖励补贴、条件及流程梳理
  10. 复合赋值运算符“+=、-=、*=、/=、%=”详解