在另一个对象上调用方法而不是自己的方法会有性能损失吗?

时间:2015-01-17 23:44:35

标签: java performance jvm

假设我有一些时间关键代码可以从某个类运行多次。但是,此代码需要处理封装在另一个类中的数据,因此我的两个选项要么获取对数据的引用并在原始类中执行计算,要么将计算委托给存储它的类并返回结果。我的问题是,与仅获取数据引用和在同一类中使用方法相比,是否在另一个类上调用方法并获得结果会带来性能损失?如果是这样具有实际意义,还是就像1-2毫秒?

2 个答案:

答案 0 :(得分:1)

  

我的问题是,与仅获取数据引用和在同一类中使用方法相比,是否在另一个类上调用方法并获得结果会带来性能损失?

它不会是“长期”。

如果这段代码是批评性的,那就意味着JIT将急切地寻找在运行时优化它的方法,并且它将首先执行的优化之一就是内联。

当然,如果给定的代码片段不是60 + k字节码长的怪物......

FWIW,HotSpot,(Oracle的实施)将尽快/晚地启动和优化同一段代码的10 000次执行。其他JVM实现可能迟早会有JIT启动。

答案 1 :(得分:1)

我想你甚至不应该考虑这个。这完全取决于JVM和jit编译优化。而且他们正在变得更好。

我相信简短的方法甚至可以编译和执行内联(即JVM甚至可能不会生成调用指令)

更好地专注于在关键功能中编写最佳代码。