我有一个大的应用程序,我正在尝试优化。 为了做到这一点,我通过在循环中运行数百万次并检查它们的处理时间来分析/标记它的小元素。
显然,Hotspot的JIT正在开始,我实际上可以看到这种情况何时发生。 我喜欢它,在“热身”期间我可以清楚地看到事情进展得更快。 然而,在达到最快的执行速度并保持一段时间之后,我可以看到速度然后降低到不那么令人印象深刻的速度,并且它保持在那里。在循环中执行的内容实际上并没有太大变化,所以我很难理解为什么转义分析会强制对代码进行“去优化”。
基本上我感觉JIT获得了最好的表现,然后安顿得慢一点,认为它“足够”。
有没有办法告诉他“这还不够,我真的希望代码尽可能快地运行!”。 我知道它可以像它已经做的那样。我怎么能强迫它这样做呢?
答案 0 :(得分:2)
使用“产品”(阅读正常发布)构建无法追踪,我会将代码放入您的套件中,看看发生了什么,热点将始终尝试获得最佳的优化。
如果你的代码强制在jit中进行去优化,它只会变慢,在分析器中,你应该能够看到大量的分配,大量异常等事情。
答案 1 :(得分:1)
您应该使用VisualVM来查找JDK附带的内存泄漏和CPU使用问题。它非常适合分析,并且有很多插件。您还可以在应用程序运行时自动启动VisualVM from Eclipse。 Netbeans可能有类似的东西。它也不会对性能产生太大影响,只要您使用抽样而不是分析。
我过去更喜欢使用JRockIt Mission Control(使用JRockIt VM),但这些工作最近完成了。