java - Java JIT 是否确定性地编译字节码——在同一台机器上每次运行都进行相同的优化?

标签 java optimization jit jvm-hotspot

Java JIT 是否在同一台机器上每次运行时都使用相同的优化来编译字节码?

它是否考虑了给定时刻的 CPU 使用率等动态因素,还是每次都会进行相同的优化而不考虑临时因素?

最佳答案

不,优化是不确定的。即使您运行完全相同的单线程、完全确定性程序,JIT 用来确定要优化哪些方法的采样器也可以选择不同的集合。

另一件可以改变生成的机器代码的事情是代码引用的某些常量的实际内存位置。 JIT 可以发出直接访问这些内存位置的机器指令,从而导致不同遍的机器代码之间存在额外差异。

研究人员使用 Jikes RVM通过使用名为 Compiler Replay 的功能解决了他们的基准测试问题.

关于java - Java JIT 是否确定性地编译字节码——在同一台机器上每次运行都进行相同的优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17370294/

相关文章:

javascript - 如何最大化异步调度程序的性能?

sql - mysql 索引的基本优化

asp.net - ASP.NET 应用程序启动速度非常慢

java - Entitymanager/持久化文件结构

java - IBM Semeru和Adoptium有什么区别

matlab - 一维高斯混合拟合 Matlab/Python 中的数据

python - 如何在 python 2.7 中使用 numba jit 编译器提高 math.sqrt() 的速度

python - Numba 没有提高性能

java - 如何从 jfreechart 中的盒须图中删除异常值(小圆圈)

java - 更改 ImageIcon 中的特定颜色