gpt4 book ai didi

java - JVM JIT 诊断工具和优化技巧

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:26:02 27 4
gpt4 key购买 nike

我听说过很多关于 JVM JIT 可以 做什么的信息,但是没有看到很多关于如何分析 JIT 在给定的程序运行中实际做什么的信息。有很多关于使用 -XX:+PrintCompilation-XX:+PrintOptoAssembly 的提示,但它会产生难以解释的非常低级的信息。

一般来说,在优化过程中,我希望有一套具有专用 JIT 预热时间等的常见操作基准测试套件,但我希望能够看到哪些优化实际上在我的代码上触发。也许我的 JVM 考虑过内联一个特定的方法调用,但由于某些原因它决定不这样做,或者 JIT 无法避免在我的循环中进行数组边界检查,因为我对不变量和循环条件的表述过于模糊。我希望像 YourKit 这样的工具能够支持某种形式的“JIT 正在发生的事情”,但我无法在 YourKit 或其他任何地方找到对此的支持。

理想情况下,我只是想了解 JIT 优化器在我的程序运行期间的想法。假设我已经充分预热了我的函数,它决定将三个方法内联到我的内部循环中,并将循环分成三个部分,中间部分没有数组边界检查,我想要这些决定和动机的总结为他们。

我在这里遗漏了什么明显的东西吗?在优化紧密的内部循环以弄清楚发生了什么时,具有 JVM 性能意识的程序员会做什么?低级别的 -XX 标志肯定不是唯一的选择,对吧?我很感激有关如何最好地处理 JVM 上的此类低级内容的提示。不,这个问题不是由过早优化引起的! :)

编辑:我想我想要的一些东西是由 -XX:+LogCompilation 给出的,但我仍然很好奇人们是否有针对此类 Activity 的一般提示和工具。

最佳答案

如果你想要一个大脑转储,你可以打印生成的汇编代码,但这比你已经拥有的水平低得多。我怀疑您正在寻找的 HotSpot JVM 不存在。我看到了基于 JRockit 的类似内容的演示,也许有一天它会进入 HotSpot。

Am I missing something obvious here? What do JVM performance-aware programmers do when optimizing tight inner loops to figure out what is going on?

通常,我喜欢尽量减少垃圾的产生,这通常表现得很好。例如微秒级延迟。

这种微优化确实需要深入了解机器代码以及 CPU 的实际工作原理。

Surely the low-level -XX flags can't be the only option, can they?

如果只是这么简单,那就复杂多了。要转储机器代码,您需要一个 JVM 未附带的额外 native 库。 ;)

I'd appreciate hints on how best to deal with this sort of low-level stuff on the JVM.

如果可以避免的话,您似乎真的不想在低级别上工作,我相信这是一件好事,您必须首先处理高级别,因为微优化有利于微 -基准测试,但很少适用于实际应用程序,因为您需要了解端到端系统的所有延迟,而在许多情况下,您甚至无需查看代码就可以做到这一点。即是数据库、操作系统、磁盘或网络 IO 中的主要延迟。

I'm still curious if people have general tips and tools for this kind of activity.

使用分析器,如果您怀疑需要降低,很可能您错过了更重要的事情。

关于java - JVM JIT 诊断工具和优化技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16258809/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com