方法提取是否会对代码性能产生负面影响?



假设您有一个相当长的方法,包含大约200行非常时间敏感的代码。是否有可能将代码的某些部分提取到单独的方法中会减慢执行速度?

最有可能的是,您将获得加速。问题是,优化200行代码是很困难的。实际上,Hotspot会在方法太长时放弃它。有一次我通过拆分一个长方法实现了2倍的加速系数。

短方法很好,它们将根据需要内联。这样方法调用开销就最小化了。通过内联,Hotspot可能会重新创建您的原始方法(不太可能,因为它太长)或创建多个方法,其中一些方法可能包含原始方法中不存在的代码。

答案是"是的,它可能会变慢。"问题是所选择的内联可能不是最优的。然而,这是非常不可能的,我希望它能加速。

开销可以忽略不计,编译器将内联方法来执行它们。

编辑:

相似的问题

我不这么认为。
是的,会添加一些调用和一些堆栈框架,但这不会花费很多时间,并且取决于你的编译器,它甚至可能以这样一种方式优化代码,即与具有许多方法的版本相比,具有一个方法的版本基本上没有区别。
通过在一个方法中实现所有功能所带来的可读性和可重用性损失,绝对不值得(如果存在的话)提高性能。

将分解出的方法声明为privatefinal是很重要的。JVM中的即时编译器将内联所有内容,这意味着结果将执行一个大方法。

最新更新