Ale*_*leš 13 java performance profiling jit jprofiler
我广泛使用jProfiler,它是一个很棒的工具,但我想知道jProfiler如何处理JIT编译的效果.
我能观察到例如内联方法吗?如果内联方法,它根本不会在快照中可见,或者jProfiler仍能计算其执行时间吗?
类似地,jProfiler中也不会显示没有副作用且可以完全优化的方法.它是否正确?
我经常在很长的预热时间后对我的应用程序进行分析,因此我希望代码可以在可能的情况下进行JIT /优化.因此,我怀疑应该优化并且在配置文件中可见的方法对我来说总是一个很大的谜.
我广泛使用jProfiler,它是一个很棒的工具,但我想知道jProfiler如何处理JIT编译的效果.
即时编译实际上是一种相当古老的技术,已被HotSpot自适应优化器取代.JIT盲目地将每个方法从Java字节码编译成本机代码,并且可能(或可能不)能够很好地优化它.
但是,自适应优化器会查看代码现在如何运行,并仅优化最常执行的代码.因为优化是知道如何代码正在被使用,优化器可以和做更好的方法内联,分支预测,锁粗化,循环平仓等等.
我能观察到例如内联方法吗?如果内联方法,它根本不会在快照中可见,或者jProfiler仍能计算其执行时间吗?
JProfiler不会报告内联的方法; 但是,即使编译器将它们内联在另一个方法中,它也会愉快地报告它们的调用.
怎么样?好吧,在编译期间,编译器会解析本机代码中的方法边界.这对于JVM在发生异常或错误时能够重建堆栈跟踪至关重要.对JVM进行采样时,JVM会使用正在执行的线程的堆栈跟踪进行响应,因此即使内联,也会准确报告当前方法.
类似地,jProfiler中也不会显示没有副作用且可以完全优化的方法.它是否正确?
你几乎是对的.没有副作用或计算返回值的方法或调用具有可能副作用的另一种方法几乎完全被优化,但 JVM中有一个化石残余记录了该方法将被调用.边际开销非常小,但具有以下有趣特征:
本文介绍了采样与仪表的区别.
| 归档时间: |
|
| 查看次数: |
703 次 |
| 最近记录: |