热点JIT优化
回答
那么,你应该扫描Brian Goetz的文章作为例子。
简言之,热点可以和将:
- 内联方法
- 加入在同一对象上相邻块
- 消除锁如果显示器不能从其他线程到达
- 消除死代码(因此大多数微基准是无意义的)
- 删除内存写入非
volatile
变量 - 更换接口调用与直接法要求只执行一次方法
等等
跳转到等效的本机机器码,而不是JVM对操作码的解释。对于Java应用程序的高度使用部分(这相当于JVM的扩展),机器代码中不需要模拟机器(JVM),可以提高速度。
当然,这是HotSpot的大部分。
this article有一个旧的,但可能仍然有效的概述。
亮点似乎基于可用的运行时分析信息,以表演古典优化:
- JITting“热点”为本地代码
- 自适应内联 - 内联最常调用实现对某个方法分派以避免庞大的代码大小
而一些次要的代码,如分配短生命的对象更便宜,以及各种其他较小的优化,再加上任何其他广告自该文章发表以来。
还有一个更详细的official whitepaper,和一个相当基本事实HotSpot Internals wiki page,其中列出了如何编写快速Java代码应该让你推断什么用例进行了优化。
有上的Jikes RVM网站使用现代JVM在优化一个伟大的演讲: ACACES’06 - Dynamic Compilation and Adaptive Optimization in Virtual Machines
它讨论了架构,折衷,测量和技术。并且命名JVM至少20件事情来优化机器代码。
我认为有趣的东西是常规编译器无法做到的与JIT相反的事情。内联方法,消除死代码,CSE,实时分析等。都是由你的普通C++编译器完成的,在这里没有什么“特别的”
但是基于乐观的假设优化某些东西,然后如果它们最终会错误的时候去优化呢? (假设一个特定的类型,删除分支,如果没有完成,将会失败,以后无论如何......)如果我们可以保证现在只存在一个类,那么删除虚拟调用(又是只能可靠地与去最优化一起工作的东西)?自适应优化是我认为真正区分JIT和运行C++编译器的一件事。
也许还会提到由JIT完成的运行时概要分析,以分析应该应用哪种优化(尽管如此,并非所有配置文件指导的优化都是唯一的)。
- 1. 没有JIT优化
- 2. JIT优化器是否优化乘法?
- 3. PyPy JIT调用优化
- 4. java.util.EmptyStackException在JIT /预热
- 5. 优化jQuery热键
- 6. JIT优化它仅修改sequentaly
- 7. 智能JVM和JIT微优化
- 8. JIT适用多少指令级优化?
- 9. Java优化:仅字节码vs JIT
- 10. JVM闲置后JIT去优化
- 11. 印刷Java的热点JIT的汇编代码
- 12. 热点JVM字节码解释器是一个跟踪JIT吗?
- 13. Webpack - 优化编译时间(热重载)
- 14. 优化Rails中的热切加载
- 15. 使用构建优化器的AOT和JIT
- 16. 编译器的边界检查/ JIT优化Java中环和C++
- 17. .NET JIT是否优化嵌套的try/catch语句?
- 18. 如何模拟JIT优化代码并查看更改?
- 19. CLR语言优化。语言编译器VS JIT编译器
- 20. 的Android JIT编译器:是编译/方法优化
- 21. .NET JIT编译器会优化一个方法调用吗?
- 22. jit优化switch语句时分支太少吗?
- 23. 有关Android优化的任何文档 - JAVAC vs JIT vs Dalvik
- 24. 可以JIT优化这种不必要的呼叫吗?
- 25. 如果优化已启用,JIT将始终内联此方法?
- 26. 如何编写Java JIT优化友好代码?
- 27. JVM JIT编译器如何优化“重复”Java代码?
- 28. 抑制模块负载上的JIT优化(仅限管理)
- 29. C#编译器和JIT都做了什么样的优化?
- 30. JIT可以防止优化方法调用吗?
太棒了!感谢和+1。 – alf
似乎已死亡,请尝试http://www.complang.tuwien.ac.at/andi/ACACES06.pdf – user60561