【发布时间】:2011-08-01 09:10:04
【问题描述】:
我有一个正在尝试优化的大型应用程序。 为此,我通过在循环中运行数百万次并检查它们的处理时间来分析/基准测试其中的小元素。
很明显,Hotspot 的 JIT 正在发挥作用,而我实际上可以看到这种情况何时发生。 我喜欢它,我可以清楚地看到“热身”期后事情进展得更快。
但是,在达到最快的执行速度并保持一段时间后,我可以看到速度降低到不那么令人印象深刻的速度,并保持在那里。
在循环中执行的内容实际上并没有太大变化,所以我很难理解为什么逃逸分析会强制代码“去优化”。
基本上,我感觉 JIT 正在获得最佳性能,然后适应较慢的东西,认为它“足够了”。
有什么方法可以告诉他“这还不够,我真的希望代码尽可能快地运行!”。 我知道它可以做到。我怎么能强迫它这样做呢?
【问题讨论】:
-
你能提供任何证据支持你的观察吗?
-
听起来您对 JVM / JIT 的工作方式有一些模糊的迷信感觉,现在您想根据这种感觉进行微优化。与其专注于微优化,不如使用分析器运行程序,找出瓶颈,然后首先专注于在相关位置使用更高效的算法。
-
也许是垃圾收集器在您的应用程序运行一段时间后变得更忙,导致您的代码运行速度变慢?您可以尝试找到一种减少内存消耗的方法,看看是否有效果。
标签: java optimization compiler-construction jvm jit