我一直在看一些Java原始集合(trove,fastutil,hppc),我注意到一個模式,類變量有時被聲明爲final
局部變量。例如:在Java中訪問最終本地變量比類變量快嗎?
public void forEach(IntIntProcedure p) {
final boolean[] used = this.used;
final int[] key = this.key;
final int[] value = this.value;
for (int i = 0; i < used.length; i++) {
if (used[i]) {
p.apply(key[i],value[i]);
}
}
}
我做了一些基準測試,看來這是稍快執行此操作時,偏偏是這樣的話?我試圖理解如果函數的前三行被註釋掉了,Java會做什麼不同。
注意:這似乎與this question類似,但這是針對C++的,並沒有解決爲什麼它們被聲明爲final
。
您可以嘗試查看生成的java程序集以查看差異。 –
剛剛意識到,原因可能是在HotSpot編譯器中,而不是字節碼本身... –
請發佈您的基準測試代碼,至少有一些機會,你錯誤地基準測試方法,實際上只測試解釋器而不是編譯器:) – Voo