假设我有一些时间关键代码可以从某个类运行多次。但是,此代码需要处理封装在另一个类中的数据,因此我的两个选项要么获取对数据的引用并在原始类中执行计算,要么将计算委托给存储它的类并返回结果。我的问题是,与仅获取数据引用和在同一类中使用方法相比,是否在另一个类上调用方法并获得结果会带来性能损失?如果是这样具有实际意义,还是就像1-2毫秒?
答案 0 :(得分:1)
我的问题是,与仅获取数据引用和在同一类中使用方法相比,是否在另一个类上调用方法并获得结果会带来性能损失?
它不会是“长期”。
如果这段代码是批评性的,那就意味着JIT将急切地寻找在运行时优化它的方法,并且它将首先执行的优化之一就是内联。
当然,如果给定的代码片段不是60 + k字节码长的怪物......
FWIW,HotSpot,(Oracle的实施)将尽快/晚地启动和优化同一段代码的10 000次执行。其他JVM实现可能迟早会有JIT启动。
答案 1 :(得分:1)
我想你甚至不应该考虑这个。这完全取决于JVM和jit编译优化。而且他们正在变得更好。
我相信简短的方法甚至可以编译和执行内联(即JVM甚至可能不会生成调用指令)
更好地专注于在关键功能中编写最佳代码。