簡體   English   中英

Java運算符性能算法與按位運算

[英]Java operators performance arithmetic vs bitwise

在真正影響性能的重復算術運算中,按位運算符會對性能產生正面還是負面影響? 我嘗試使用Google進行搜索,但無法獲得確切的答案。

例如我應該使用這個:

int s = 15 << 4;

或這個:

int s = 15 * 16;

來提高我的應用程序的性能。

運算符優先級也與性能相關嗎?

即使這些操作不是編譯時常量表達式 (例如n << 4 ),虛擬機也會在JIT編譯過程中選擇更快的實現,因此您可以用最容易理解的任何一種方式編寫。 性能將是相同的。

這是HotSpot JVM C2 JIT編譯器的C ++代碼 ,用左移將乘法替換為2的冪。 在下面一些地方,您可能會發現一些常量的更多優化方法(例如,用(n << 3) + (n << 2)代替n * 12 )。

在這種情況下,您可以使用其中任何一個。

兩者都是編譯時可評估的常量表達式,因此編譯器將執行該操作。 因此,運行時完全不會受到影響。

如果您設計了一個僅在運行時可評估的示例,那么很難說,但是如果您是我,無論如何我都相信編譯器。 始終對任務使用適當的運算符,以防止錯誤蔓延。您始終可以分析性能。

這段代碼

public class A {
    public static void main(String[] args) {
        int a = 15 << 4;
        int b = 15 * 16;
    }
}

編譯為

  public static void main(java.lang.String[]);
    Code:
       0: sipush        240
       3: istore_1
       4: sipush        240
       7: istore_2
       8: return

暫無
暫無

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

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