簡體   English   中英

通過創建新變量來提高性能

[英]performance by creating new variable

我想盡可能高效地編寫我的 java 程序,所以我正在減少一切以獲得最佳性能......在程序中,一種方法稱為 apprx。 900 萬次。 我必須計算一些東西,只需減去兩個整數,這需要兩次。 所以我的問題是,什么更快:用計算結果初始化新的 integer 還是只計算兩次值? 例如:

int result = a-b;
methodToCall(result, foo, bla);
otherMethod(result, bla, foo);

或者

methodToCall(a-b, foo, bla);
otherMethod(a-b, bla foo);

我無法直接看到差異,但有時第一種方法會更快一點……總的來說:第一種方法總是更好嗎? 例如,當使用其他類型的計算(更復雜)時。 java 編譯器或 jvm 是否對其進行了優化以優化它,例如看到我做了兩次相同的計算並且只做一次並自己緩存結果?

第一個理論上會更快。

在第二種情況下,JVM 不僅會計算兩次ab ,還會在將結果傳遞給兩個方法調用之前為結果臨時分配存儲兩次。

我剛剛對這些案例進行了 1 億次測試,結果它們之間只有 10-15 毫秒的差異,而第一個更快。 我的測試結果會出現偏差,因為 a 和 b 是常數,但它似乎證實了這個理論。

只需測量時間。 在不了解事實的情況下,您無法得出任何結論。 請參閱有關工具的這個問題。

如果很難注意到差異,那么總是更喜歡可讀性好的代碼。

JVM 可以優化第二種情況下的代碼,使其與第一種情況一樣。 但是,如果不是這樣,它可能會花費您 1 個時鍾周期,這可能是大約 3 毫秒(如果您在 3 GHz 處理器上調用它 900 萬次)

我更喜歡第一種形式,因為它減少了重復,這對我來說更容易閱讀。 如果你的表達更昂貴,它可能會產生更大的影響。

暫無
暫無

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

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