我听到了很多关于什么JVM JIT们可以做,但没有看到如何分析一下JIT实际上是在做你的程序给定的运行大量的信息。 有很多关于使用技巧-XX:+PrintCompilation
和-XX:+PrintOptoAssembly
但它导致了真的是很难解释的低级信息。
在一般情况下,在优化过程中,我喜欢有专门的JIT预热时间等常用操作的基准套件,但我希望能够看到哪些优化实际上是射击我的代码。 也许我的JVM认为内联特定的方法调用,但一些关于它使人们决定不,或者也许是JIT是无法避免数组的边界检查在我的循环,因为我措辞不变我和循环条件太含糊。 我期望像YourKit的工具来支持某种形式的“正在发生的事情与JIT”,但我一直没能找到该支持YourKit或其他地方。
理想的情况是我只是想什么样的JIT的优化我的程序的运行过程中的思维大脑转储。 说我热身我的功能很多,它决定内联三种方法进入我的内循环,并打破循环为三个部分,没有数组的边界在中间部分的检查,我想这些决定和动机的总结他们。
我失去了一些东西明显在这里吗? 什么是JVM性能感知程序员优化紧凑的内部循环弄清楚是怎么回事的时候怎么办? 当然低级-XX
标志不能是唯一的选择,可他们? 我会很感激就如何最好地处理这种低层次的东西在JVM上的提示。 不,这个问题不会被过早的优化动机! :)
编辑:我想一些什么,我想由下式给出-XX:+LogCompilation
但我仍然好奇,如果人们对这种活动的一般技巧和工具。