[英]Performance of repeated getter calls vs. saving value in a local variable
[英]Repeated function calls vs. storing results in temporary variable
我的代碼如下所示:
class Main {
public static void main(String args[]){
String[] s1 = {"This ", "is ", "a ","sentence ", "."};
String sentence = Arrays.toString(s1);
System.out.println(sentence.substring(4, sentence.length()-1));
}
private static <T> String arrayToString(T[] t){
StringBuilder sb = new StringBuilder();
for(T val: t){
sb.append(val.toString());
}
}
}
我試圖單行執行上述操作:
System.out.println(arrayToString(s1).substring(
4, arrayToString(s1).length()));
我的問題是,為了避免存儲對計算值的引用,我多次調用了arrayToString()方法。
arrayToString
,對於另一個而言,它更具可讀性,因為我們現在知道arrayToString
返回某種“類似於句子”的對象。 使用變量會添加更多有用的上下文,並使代碼更具可讀性。 通常,在使用Java進行編碼時,您應該認識到, 在更頻繁地執行代碼時,您的代碼是及時編譯的。 由於計算
arrayToString(s1).substring(4, arrayToString(s1).length())
可以預見,您可以期望即時編譯器啟動后,性能損失會得到解決,因為它將自己為計算創建緩存。 對於任何要優化的代碼來說,這當然是一個過於樂觀的假設,但是對於Java,通常最好堅持編寫可讀代碼,而不必過於擔心性能,代碼抽象和性能之間的這種差距部分地由Java消除。 Java虛擬機。
通常,您可以使用我只能推薦的工具(例如JIT watch)來監視已編譯代碼的性能。 有時很難確定性能瓶頸,但是根據我的經驗,像您這樣的代碼永遠不會導致不良的用戶體驗,因為僅是處理幾個時間周期的簡單字符串,這甚至不足以ping數據庫。 就在您閱讀本文時,我的手機可能已經完成了數十億次的計算。
總而言之,人們過於擔心性能。 編寫可維護且易讀的代碼應該始終是您的主要目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.