JIT优化序言

  JIT是Just-In-Time的缩写,是Java虚拟机把字节码的再编译为本地代码的编译器的名称。我为什么突然想写这个呢?因为国内对JIT的研究非常少,而且面试也问得少,但是我认为JIT对虚拟机特别重要,因为对性能的提升非常明显。java虚拟机使用的是jvm指令集,而底层机器有自己的指令集,指令集的差异使得这个“翻译”过程非常耗费性能。对于这个问题,在JIT之前,java曾经有AOT(Ahead-Of-Time),这种编译器是将字节码bytecode提前编译为机器代码。AOT被淘汰的原因是统计发现80%的bytecode只执行一次,那么全部编译为机器代码,就没有必要了。对于只执行一次的代码,解释器性能更好,因为编译为本地代码开销比较大。
  我这个子专栏专讲JIT优化。主要分为以下67种优化技术,后面的星号表示面试被问概率,星号越多被问概率越大:
  编译策略compiler tactics

  • Delayed compilation⭐⭐⭐⭐⭐
  • Tiered compilation⭐⭐⭐⭐⭐
  • On-stack replacement⭐⭐⭐⭐⭐
  • delayed reoptimization⭐⭐
  • program dependence graph rep.⭐
  • static single assignment rep.⭐⭐⭐
      proof-based techniques
  • exact type inference⭐
  • memory value inference⭐
  • memory value tracking⭐
  • constant folding⭐
  • reassociation⭐
  • operator strength reduction⭐
  • null check elimination⭐⭐⭐⭐
  • type test strength reduction⭐
  • type test elimination⭐⭐
  • algebraic simplification⭐
  • common subexpression elimination⭐
  • integer range typing⭐
      flow-sensitive rewrites
  • conditional constant propagation⭐
  • dominating test detection⭐
  • flow-carried type narrowing⭐
  • dead code elimination⭐
      language-specific techniques
  • class hierarchy analysis⭐
  • devirtualization⭐
  • symbolic constant propagation⭐
  • autobox elimination⭐
  • escape analysis⭐⭐⭐⭐⭐
  • lock elision⭐⭐⭐⭐⭐
  • lock fusion⭐⭐⭐⭐⭐
  • de-reflection⭐
      speculative (profile-based) techniques
  • optimistic nullness assertions⭐
  • optimistic type assertions⭐
  • optimistic type strengthening⭐
  • optimistic array length strengthening⭐
  • untaken branch pruning⭐
  • optimistic N-morphic inlining⭐
  • branch frequency prediction⭐
  • call frequency prediction⭐
      memory and placement transformation
  • expression hoisting⭐
  • expression sinking⭐
  • redundant store elimination⭐
  • adjacent store fusion⭐
  • card-mark elimination⭐
  • merge-point splitting⭐
      loop transformations
  • loop unrolling⭐
  • loop peeling⭐
  • safepoint elimination⭐
  • iteration range splitting⭐
  • range check elimination⭐
  • loop vectorization⭐
      global code shaping
  • inlining (graph integration)⭐⭐
  • global code motion⭐
  • heat-based code layout⭐
  • switch balancing⭐
  • throw inlining⭐
      control flow graph transformation
  • local code scheduling⭐
  • local code bundling⭐
  • delay slot filling⭐
  • graph-coloring register allocation⭐
  • linear scan register allocation⭐
  • live range splitting⭐
  • copy coalescing⭐
  • constant splitting⭐
  • copy removal⭐
  • address mode matching⭐
  • instruction peepholing⭐
  • DFA-based code generator⭐
      总结下,面试最热门问题是:
      1. 延迟编译
      2. 分层编译
      3. 栈上替换
      4. 逃逸分析
      5. 锁消除
      6. 锁粗化
      除这六种优化外,其余61种优化,面试几乎不会问到。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醒过来摸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值