java - 热点JIT优化和 "de-optimization": how to force FASTEST?

标签 java optimization compiler-construction jvm jit

我有一个正在尝试优化的大型应用程序。 为此,我通过在循环中运行数百万次并检查它们的处理时间来对它的小元素进行分析/基准测试。

很明显,Hotspot 的 JIT 正在发挥作用,我实际上可以看到它何时会发生。 我喜欢它,我可以清楚地看到“热身”期过后事情进展得更快。

然而,在达到最快的执行速度并保持一段时间后,我可以看到速度随后降低到不太令人印象深刻的速度,并保持在那里。

循环中执行的内容实际上并没有太大变化,所以我很难理解为什么逃逸分析会强制代码“去优化”。

基本上我感觉 JIT 获得了最佳性能,然后满足于较慢的东西,认为它“足够了”。

有没有办法告诉他“这还不够,我真的希望代码尽可能快地运行!”。 我知道它可以,因为它已经做到了。我怎样才能强制它这样做?

最佳答案

不可能通过“产品”(读取正常发布)构建进行跟踪,我会将代码放入您的套件中,看看发生了什么,热点将始终尝试获得最佳优化。

只有在 jit 中有强制取消优化的代码,它才会变慢,在分析器中,您应该能够将其视为大量分配、大量异常之类的事情。

关于java - 热点JIT优化和 "de-optimization": how to force FASTEST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5593215/

相关文章:

java - 使用 GWT 获取父类(super class)中的泛型类型类

java - 如何在没有 Eclipse 的情况下创建项目

java - 在 Android 应用程序中从 C++ 调用 Java 代码

optimization - Yslow 替代方案 - 针对小型网站的优化

compiler-construction - go build vs go build file.go

c++ - fatal error mysql.h :No such file or directory during compilation

java - 初始化抽象类的一般变体

javascript - 为 React hooks 更新 Javascript 对象中属性的最有效方法

java - 本地方法调用与对象方法调用

compiler-construction - 查找多语言编译器或优化器(C,C++,Java)