这个问题纯粹是关于速度和效率,而不是结构更好的方法。
基本上我需要一个视图模块来读取一个状态,它本质上是一个字符数组。这些角色有位置,名称,项目等。
我可以用信息的getter创建一个字符对象数组,或者我可以将每个字符表示为包含相同信息的数组。
视图模块读取这两种方法中的哪一种会更快?
例如: 方法1
for(int i = 0; i < characters.length(); i++){
Character temp = character[i];
this.drawName(temp.getName());
this.drawCharacterAt(temp.getColor(), temp.getX(), temp.getY())
....
}
接近2
for(int i = 0; i < characters.length(); i++){
this.drawName(character[i][0]);
this.drawCharacterAt(character[i][1],character[i][2],character[i][3]);
....
}
答案 0 :(得分:1)
至少在JIT开始之后应该没有区别。让我们来看看每种情况下会发生什么:
案例1数组:
案例2对象:
然而,JIT将内联该getter调用,使其成为:
因此,在我们完成JIT之后,我们最终会得到相同的代码。如果代码的执行频率不足以使JIT感兴趣,那么我们可能无论如何都会忽略开销。另外,使用吸气剂可以更容易地看到会发生什么。
答案 1 :(得分:0)
方法2更节省内存 - 它涉及读取更少的数据 - 这可以使其更快。但是,方法1中的内存访问模式可能对缓存/预取更加友好,这可能会产生更大的影响。与大多数性能问题一样,唯一真正的答案是直接分析您的特定用例,并了解哪种用例在实践中更快。