[英]Is there any performance reason to declare method parameters final in Java?
是否有任何性能原因在Java中聲明方法參數final?
如:
public void foo(int bar) { ... }
與:
public void foo(final int bar) { ... }
假設只讀取bar
並且從未在foo()
修改過。
final關鍵字不會出現在本地變量和參數的類文件中,因此不會影響運行時性能。 它的唯一用途是澄清編碼人員意圖變量不被改變(許多人認為它的使用可疑的原因),以及處理匿名內部類。
關於方法本身的最終修飾符是否具有任何性能增益存在很多爭論,因為無論修飾符如何,方法都將在運行時由優化編譯器內聯。 在這種情況下,它也應該僅用於限制方法的覆蓋。
最終參數的唯一好處是它可以在匿名嵌套類中使用。 如果一個參數永遠不會改變,即使沒有最終修飾符,編譯器也會檢測到它是正常操作的一部分。 很少有錯誤是由意外分配的參數引起的 - 如果你的方法足夠大,需要這種級別的工程,讓它們變小 - 你調用的方法不能改變你的參數。
在類加載后運行的編譯器(如JIT編譯器)可以利用最終方法。 因此,聲明為final的方法可能會帶來一些性能優勢。
http://www.javaperformancetuning.com/tips/final.shtml
哦,另一個好資源
再多說一點,使用在方法中聲明的非最終局部變量 - 內部類實例可能比堆棧幀壽命更長,因此局部變量可能會在內部對象仍然存活時消失
我假設編譯器可能會刪除所有具有基本類型的私有靜態最終變量,例如int,並將它們直接嵌入代碼中,就像使用C ++宏一樣。
但是,我不知道這是否在實踐中完成,但可以這樣做以節省一些內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.