簡體   English   中英

Java Getter方法性能

[英]Java Getter Method Performance

我正在創建一個游戲,並且我所有的數據都被封裝了,這顯然意味着如果我想從該類的實例中獲取某些東西,則必須調用getter方法。 我有一個渲染循環,每秒被調用很多次。 我必須對同一個getter方法使用多個調用,以便從對象中獲取單個字段並對其執行多項操作。 將額外的引用存儲到需要在類中不斷獲取的對象是否更好? 在這種情況下,我可以在構造函數中獲取它並完成。 這有意義嗎? 萬分感謝。

我同意其他發布的答案,即沒有性能差異。

但是,我認為該答案中有關可讀性和最佳實踐的討論都誤解了OP的問題。 他沒有問他是否可以避開最佳實踐並且不使用吸氣劑。 他在問他是否可以/應該創建對檢索到的對象的本地引用,而不是在每一行上都調用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);

第二個版本更具可讀性,尤其是在現實世界中,當代碼中存在更多噪音和縮進時,讀取簡短行引用描述性命名的本地var要容易得多,而不是看到相同的getter調用連續十幾次。

將額外的引用存儲到需要在類中不斷獲取的對象是否更好?

沒有。

特別是因為您說您的代碼經常被調用,所以JIT將啟動。它肯定會看到,可以用更簡單的加載代替getter調用。

不要低估JIT!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM