热点JIT优化

Art*_*tch 16 java jit compiler-optimization

在关于Hotspot中的JIT的讲座中,我想尽可能多地给出JIT执行的特定优化的示例.

我只知道"方法内联",但应该有更多.为每个例子投票.

alf*_*alf 15

好吧,你应该扫描Brian Goetz的文章作为例子.

简而言之,HotSpot可以并且将会:

  1. 内联方法
  2. 加入synchronized同一对象上的相邻块
  3. 如果无法从其他线程访问监视器,则消除锁定
  4. 消除死代码(因此大多数微基准都没有意义)
  5. 删除非volatile变量的内存写入
  6. 使用直接方法调用替换接口调用,方法仅实现一次

等等


小智 10

有关现代JVM在Jikes RVM站点上使用的优化的精彩演示: ACACES'06 - 虚拟机中的动态编译和自适应优化

它讨论了架构,权衡,测量和技术.并且至少列出了JVM为优化机器代码所做的20件事.

  • 似乎死了,试试http://www.complang.tuwien.ac.at/andi/ACACES06.pdf (4认同)

Voo*_*Voo 7

我认为有趣的东西是传统编译器不能与JIT相反的东西.内联方法,消除死代码,CSE,实时分析等都是由你的普通c ++编译器完成的,这里没什么"特别的"

但是,基于乐观的假设来优化某些东西,如果结果出现错误,那么以后会进行去优化?(假设一个特定的类型,移除将在以后无论如何都会失败的分支,...)如果我们可以保证目前只存在一个类(同样只能在去优化中可靠地工作的东西),删除虚拟调用?自适应优化是我认为真正区分JIT与mill c ++编译器运行的一件事.

也许还提到了JIT完成的运行时分析,以分析它应该应用哪些优化(不过那时所有的配置文件引导的优化都不再那么独特).


mil*_*ose 5

有一个古老的,但可能仍然有效概述在这篇文章

重点似乎是根据可用的运行时分析信息执行经典的优化:

  • 将“热点”整合到本机代码中
  • 自适应内联–内联给定方法分派中最常用的实现,以避免庞大的代码量

还有一些较小的改进,例如世代GC,它使分配短期生存对象的成本降低,并且进行了其他各种较小的优化,以及自该文章发表以来添加的其他内容。

还有更详细的官方白皮书,以及相当细腻的HotSpot Internals Wiki页面,其中列出了如何编写快速Java代码的方法,这些代码应该可以让您推断出优化了哪些用例。