簡體   English   中英

是否有任何性能原因在Java中聲明方法參數final?

[英]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

哦,另一個好資源

http://mindprod.com/jgloss/final.html

再多說一點,使用在方法中聲明的非最終局部變量 - 內部類實例可能比堆棧幀壽命更長,因此局部變量可能會在內部對象仍然存活時消失

我假設編譯器可能會刪除所有具有基本類型的私有靜態最終變量,例如int,並將它們直接嵌入代碼中,就像使用C ++宏一樣。

但是,我不知道這是否在實踐中完成,但可以這樣做以節省一些內存。

暫無
暫無

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

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