在关于Hotspot中的JIT的讲座中,我想尽可能多地给出JIT执行的特定优化的示例。
我知道“方法内联”,但应该有更多。为每个例子投票。
答案 0 :(得分:14)
嗯,你应该扫描Brian Goetz的文章作为例子。
简而言之,HotSpot可以而且将会:
synchronized
块volatile
变量的内存写入等等
答案 1 :(得分:10)
现代JVM在Jikes RVM站点上使用的优化有很好的演示: ACACES’06 - Dynamic Compilation and Adaptive Optimization in Virtual Machines
讨论架构,权衡,测量和技术。并且至少列出了JVM为优化机器代码所做的20件事。
答案 2 :(得分:7)
我认为有趣的东西是传统编译器不能与JIT相反的东西。内联方法,消除死代码,CSE,实时分析等都是由普通的c ++编译器完成的,这里没什么“特殊”
但是基于乐观的假设来优化某些东西,然后如果它们变成错误则再次优化? (假设一个特定的类型,删除将在以后无论如何都会失败的分支,...)如果我们可以保证目前只存在一个类(同样只能在去优化中可靠地工作的东西),删除虚拟调用?自适应优化是我认为真正区分JIT与mill c ++编译器运行的一件事。
也许还提到了JIT完成的运行时分析,以分析它应该应用哪些优化(不过那些不再是唯一的,但所有的配置文件引导的优化)。
答案 3 :(得分:5)
this article中有一个陈旧但可能仍然有效的概述。
亮点似乎是根据可用的运行时分析信息执行经典优化:
还有一些次要的,比如代际GC,它可以使分配短寿命的物品更便宜,以及各种其他更小的优化,以及自该文章发布以来添加的其他内容。
还有一个更详细的official whitepaper,以及一个相当细致的HotSpot Internals wiki page,其中列出了如何编写快速Java代码,以便您可以推断出哪些用例已经过优化。
答案 4 :(得分:2)
跳转到等效的本机代码而不是操作码的JVM解释。对于Java应用程序中使用频繁的部分(相当于JVM的扩展)而言,不需要在机器代码中模拟机器(JVM)可以提高速度。
当然,这就是HotSpot的大部分内容。