Java: 在循环方法之间传递对象引用是否有任何实际性能成本
Java: Is there any real performance cost for passing object references between looped methods
场景一:
public class Game {
public void doSomething(Hero hero, Enemy enemy){
if (hero.IsAlive()){
hero.checkCollisionWith(enemy);
}
}
}
场景二
public class Game {
Hero hero;
Enemy enemy;
public Game(Hero hero, Enemy enemy) {
this.hero = hero;
this.enemy = enemy;
}
public void doSomething() {
if (hero.IsAlive()){
hero.checkCollisionWith(enemy);
}
}
}
现在,在正常情况下,我想任何一个都可以接受,但是,在每秒调用 60 次的游戏循环中,通常应该避免第一个选项吗?通过在循环中调用的方法传递引用对性能有多大影响?
还请记住,这只是一个示例,在实际项目中,会调用更多 很多 这些方法,并涉及更多对象。
预先(在构建时)给游戏 class 所需的参考资料而不是不断地传递它们会更明智吗?
以这种方式传递参数非常有效 - 调用不带参数的函数和调用带参数的函数之间的区别可以忽略不计。
特别是在 rendering/collisions/AI 代码肯定会非常占用处理器的游戏环境中,这样的小差异无关紧要。
然而,从代码的简单性和优雅性的角度来看,我认为您的第二个解决方案更包含、更传统的 OOP 和可读性。
场景一:
public class Game {
public void doSomething(Hero hero, Enemy enemy){
if (hero.IsAlive()){
hero.checkCollisionWith(enemy);
}
}
}
场景二
public class Game {
Hero hero;
Enemy enemy;
public Game(Hero hero, Enemy enemy) {
this.hero = hero;
this.enemy = enemy;
}
public void doSomething() {
if (hero.IsAlive()){
hero.checkCollisionWith(enemy);
}
}
}
现在,在正常情况下,我想任何一个都可以接受,但是,在每秒调用 60 次的游戏循环中,通常应该避免第一个选项吗?通过在循环中调用的方法传递引用对性能有多大影响?
还请记住,这只是一个示例,在实际项目中,会调用更多 很多 这些方法,并涉及更多对象。
预先(在构建时)给游戏 class 所需的参考资料而不是不断地传递它们会更明智吗?
以这种方式传递参数非常有效 - 调用不带参数的函数和调用带参数的函数之间的区别可以忽略不计。
特别是在 rendering/collisions/AI 代码肯定会非常占用处理器的游戏环境中,这样的小差异无关紧要。
然而,从代码的简单性和优雅性的角度来看,我认为您的第二个解决方案更包含、更传统的 OOP 和可读性。