我有一个正在尝试优化的大型应用程序。 为此,我通过在循环中运行数百万次并检查它们的处理时间来对它的小元素进行分析/基准测试。
很明显,Hotspot 的 JIT 正在发挥作用,我实际上可以看到它何时会发生。 我喜欢它,我可以清楚地看到“热身”期过后事情进展得更快。
然而,在达到最快的执行速度并保持一段时间后,我可以看到速度随后降低到不太令人印象深刻的速度,并保持在那里。
循环中执行的内容实际上并没有太大变化,所以我很难理解为什么逃逸分析会强制代码“去优化”。
基本上我感觉 JIT 获得了最佳性能,然后满足于较慢的东西,认为它“足够了”。
有没有办法告诉他“这还不够,我真的希望代码尽可能快地运行!”。 我知道它可以,因为它已经做到了。我怎样才能强制它这样做?
最佳答案
不可能通过“产品”(读取正常发布)构建进行跟踪,我会将代码放入您的套件中,看看发生了什么,热点将始终尝试获得最佳优化。
只有在 jit 中有强制取消优化的代码,它才会变慢,在分析器中,您应该能够将其视为大量分配、大量异常之类的事情。
关于java - 热点JIT优化和 "de-optimization": how to force FASTEST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5593215/