Java Getter 方法性能

Java Getter Method Performance

我正在创建一个游戏并且封装了所有数据,这显然意味着如果我想从 class 的实例中获取某些内容,我必须调用 getter 方法。我有一个每秒被调用多次的渲染循环。我不得不多次调用同一个 getter 方法,以便从对象中获取单个字段并用它做多件事。将我不断获取的对象的额外引用存储在需要它的 class 中会更好吗?在这种情况下,我可以在构造函数中获取它并完成。这有意义吗?非常感谢。

Would it be better to just store an extra reference to the object that I am constantly grabbing in my class that needs it?

没有

特别是因为你说你的代码经常被调用,JIT 就会启动。它肯定会看到 getter 调用可以用更简单的加载来代替。

不要小看 JIT!

我同意其他发布的答案,即没有性能差异。

但是,我认为该答案中关于可读性和最佳实践的讨论都误解了 OP 的问题。他不是在问他是否可以避开最佳实践而不使用 getters。他问他是否 can/should 创建对检索到的对象的本地引用,而不是在每一行上调用 getter,在我的世界中,这是标准做法,确实更具可读性。

首先考虑:

doFooThings(service.getFoo());

doBarThings(service.getFoo().getBar());

doBazThings(service.getFoo().getBar().getBaz());
doMoreBazThings(service.getFoo().getBar().getBaz());
doOneLastAmazingBazThing(service.getFoo().getBar().getBaz());

比较:

Foo myFoo = service.getFoo();
doFooThings(myFoo);

Bar myBar = myFoo.getBar();
doBarThings(myBar);

Baz myBaz = myBar.getBaz();
doBazThings(myBaz);
doMoreBazThings(myBaz);
doOneLastAmazingBazThing(myBaz);

第二个版本更具可读性,尤其是在代码中有更多噪音和缩进的现实世界中,阅读引用描述性命名的局部变量的简洁行比查看要容易得多同一个 getter 呼叫连续出现十几次。