【发布时间】:2015-09-23 03:04:28
【问题描述】:
所以我知道 java 具有即时编译 (JIT),这使其优于 C++ 等静态编译语言。有没有说明java JIT的例子?对于给定算法,可能的示例可能优于 C 或 C++ 代码?或者显示算法的迭代随着时间的推移变得越来越快(我不确定这是否是 JIT 的一个实例)。或者只是任何可以显示某种 JIT 存在的测量的例子吗?我问这个问题是因为我只读过 JIT 并希望证明它的存在,而不是仅仅像某种宗教上帝一样相信它。
备注 - 如果这个问题太自以为是,请发表评论并告诉我原因。我只是对 JIT 感到好奇,并且在使用 java 几年后,直到今天我仍然不知道我如何从中受益,以及它是否能够达到优于静态编译对应物的炒作。
其他信息 - 我已阅读有关它何时执行的信息,并且我不是在寻找更多信息,我只需要相信它是真实的,我想看到一些可以显示我正在做什么的东西假设这样做。
编辑 - 很好,我已经分配了响应,有人说单独比较 JIT 优化与 C++ 的速度不是一个好方法,纯粹的 java 比较是最少的可怕。用 java 展示这个的例子怎么样:
因此执行相同的 JIT 和非 JIT 优化程序。在开始时,JIT 没有启动,程序开始变得更快,而静态始终具有相同的性能。然后条件在 5.5 秒左右发生变化,应用程序的使用略有不同。 JIT 有能力再次适应这些变化,首先是时间尖峰,然后再次开始优化,甚至可以达到更好的最佳状态,因为应用程序的使用略有不同。 这是显示 JIT 的可接受示例吗? (我将努力实现这一目标并查看每个人的链接和视频)。
【问题讨论】:
-
也许这个beyondjava.net/blog/… 是这样的,但这个例子只包含原语......我理想情况下我希望 GC 也参与其中。
-
您可以通过比较带有和不带有-Xint 的java 对您感兴趣的任何事物的影响来研究JIT 的效果。但请注意,由于 GC 的影响,Java 的微基准测试是变化无常的,即使您排除了 JITing。
-
有些人会说“编译一次,随处运行”是 JIT 技术的更大好处,而不是你能以微秒的速度击败 C 或 C++。请注意,Java 运行时发生的大部分事情无论如何都是用 C 编写的,那么您要证明 Java 在这个或那个算法上是更快还是更慢?
-
用
-xint运行一个程序来禁用jit,看看它的性能是如何受到影响的。性能的任何变化都必须是由于 jit(或缺乏)。确保首先阅读有关在 Java 上编写良好基准的内容(这不是微不足道的)。至于具体的 jit 优化,我在 github 上有一个你可能会觉得有趣的 repo:github.com/yshavit/jitperf