首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JVM JIT诊断工具和优化提示

JVM JIT诊断工具和优化提示
EN

Stack Overflow用户
提问于 2013-04-28 02:07:14
回答 1查看 435关注 0票数 6

我听说了很多JVM JIT可以做什么,但是没有看到很多关于如何分析JIT在给定的程序运行中实际上正在做什么的信息。有很多关于使用-XX:+PrintCompilation-XX:+PrintOptoAssembly的技巧,但是它会导致很难理解的低级别信息。

一般来说,在优化过程中,我希望有一个具有专用JIT热身时间等的通用操作的基准测试套件,但是我希望能够看到哪些优化实际上在我的代码上启动。也许我的JVM考虑了内联一个特定的方法调用,但是它决定不这样做,或者JIT无法避免循环中的数组边界检查,因为我对不变量和循环条件的措辞太模糊了。我希望像YourKit这样的工具能够支持某种形式的“JIT是怎么回事”,但我一直无法在YourKit或其他地方找到对此的支持。

理想情况下,我只想知道JIT的优化器在运行我的程序时在想什么。假设我对函数进行了大量的热身,它决定将三种方法内联到我的内循环中,并将循环分成三个部分,中间部分没有数组边界检查,我想要总结一下这些决定及其动机。

我是不是漏掉了什么明显的东西?当优化紧密的内部循环以了解发生了什么情况时,JVM性能敏感的程序员会做什么?当然,低级别的-XX标志不可能是唯一的选择,对吗?对于如何最好地处理JVM上的这类低级问题,我将非常感激。不,这个问题不是出于过早的优化!:)

编辑:我想我想要的部分内容是由-XX:+LogCompilation提供的,但我仍然很好奇人们是否有这类活动的一般提示和工具。

EN

回答 1

Stack Overflow用户

发布于 2013-04-28 06:56:02

如果您想要一个大脑转储,您可以打印生成的程序集代码,但这要比您已经拥有的要低得多。我怀疑您正在寻找的东西并不存在于HotSpot JVM中。我看到了一个基于JRockit的类似的演示文稿,也许有一天它会进入HotSpot。

我是不是漏掉了什么明显的东西?当优化紧密的内部循环以了解发生了什么情况时,JVM性能敏感的程序员会做什么?

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

这种微观优化确实需要深入了解机器代码和CPU的实际工作方式。

当然,低级别的-XX标志不可能是唯一的选择,对吗?

只要在简单的地方,它就会复杂得多。要转储机器代码,您需要一个额外的本机库,它不随JVM附带。;)

对于如何最好地处理JVM上的这类低级问题,我将非常感激。

如果你能避免的话,你似乎真的不想在低层次上工作--我相信这是件好事,你必须首先处理高层次的问题,因为微优化对于微基准来说是好的,但是对于实际的应用程序却很少有好处,因为你需要理解你的端到端系统的所有延迟,在很多情况下你甚至可以不用看代码就可以做到这一点。也就是说,数据库、操作系统、磁盘或网络IO中的主要延迟。

我仍然很好奇,人们是否有这种活动的一般提示和工具。

使用分析器,如果你怀疑你需要往下走,你很可能错过了更重要的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16258809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档