Java代碼最佳化--儘可能地使用stack(棧)變數(方法內部的局部變數)

來源:互聯網
上載者:User
變數|最佳化  

Java程式包含了大量的對象,我們需要瞭解它們是從哪裡被訪問的,變數儲存於何處對程式的效能有顯著的影響--尤其是某些需要被頻繁訪問的變數。

我們寫一個Java類,在其內部方法中定義的局部變數或對象是儲存在stack(堆棧)中的,且JVM是一種stack-based的,因此訪問和操縱stack中的資料時效能最佳。而Java類的instance變數(這個類的field)和static變數是在constant pool(常量池)中儲存和得到訪問的。constant pool中儲存了所有的符號引用(symbolic references),指向所有型別(types)、範圍(field),以及每個型別所使用的所有函數(mothods)。訪問instance和static變數時,由於它們存放於constant pool中,所以JVM需要使用更多更耗時的作業碼(剖析器產生的bytecode可以看出來)來訪問它們。

下面給出一段程式碼範例,對比後說明怎麼儘可能地使用stack變數:

package test;

public class StackVars {

    private int x;    // instance變數
    private static int staticX; //static 變數

    public void stackAccess(int val) {  //訪問和操作stack變數j
        int j = 0;
        for (int i = 0; i < val; i++) {
            j += 1;
        }
    }

    public void instanceAccess(int val) {//訪問和操作instance變數x
        for (int i = 0; i < val; i++) {
            x += 1;
        }
    }

    public void staticAccess(int val) {//訪問和操作static變數staticX
        for (int i = 0; i < val; i++) {
            staticX += 1;
        }
    }
}

經測試,發現運行instanceAccess()和staticAccess()方法的時間大約相同,但卻比運行stackAccess()方法慢了2~3倍。因此我們對instanceAccess()、staticAccess()兩個方法的代碼作以下調整,以得到更快的效能:

 public void instanceAccess(int val) {//訪問和操作instance變數x
        int tempX=x;
        for (int i = 0; i < val; i++) {
            tempX += 1;
        }
        x=tempX;
    }

    public void staticAccess(int val) {//訪問和操作static變數staticX
        int tempStaticX=staticX;
        for (int i = 0; i < val; i++) {
            tempStaticX += 1;
        }
        staticX=tempStaticX;
    }

改善之處就是將instance和static變數放到迴圈之外,而用一個stack變數來完成多次局部運算,最後再將這個stack變數的值傳回instance或static變數,從而提高了代碼的效能。

歡迎給出評論。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.