java定義靜態變數的作用 static關鍵字__效能最佳化

來源:互聯網
上載者:User

我們知道類中的靜態變數在程式運行期間,其記憶體空間對所有該類的對象執行個體而言是共用的,為了節省系統記憶體開銷、共用資源,應該將一些變數聲明為靜態變數。通過下面的例子,你就會發現有什麼不同。

代碼一:

public class MemoryTest {       static class Data{           private int week;           private String name;           Data(int i, String s){               week = i;               name = s;           }       }              Data weeks[] = {               new Data(1,"monday"),               new Data(2,"Tuesday"),               new Data(3,"Wednesday"),               new Data(4,"Thursday"),               new Data(5,"Friday"),               new Data(6,"Saturday"),               new Data(7,"Sunday")       };              public static void main(String[] args) {           final int N = 20000;           MemoryTest test = null;           for (int i = 0; i <=N; i++) {              test = new MemoryTest();           }           System.out.println(test.weeks.length);       }  }  

代碼二:

public class MemoryTest {        static class Data{            private int week;            private String name;            Data(int i, String s){                week = i;                name = s;            }        }              static Data weeks[] = {               new Data(1,"monday"),               new Data(2,"Tuesday"),               new Data(3,"Wednesday"),               new Data(4,"Thursday"),               new Data(5,"Friday"),               new Data(6,"Saturday"),               new Data(7,"Sunday")       };              public static void main(String[] args) {           final int N = 20000;           MemoryTest test = null;           for (int i = 0; i <=N; i++) {               test = new MemoryTest();           }           System.out.println(test.weeks.length);       }   }  


我想大家應該發現上面那兩個類的區別了吧。

 Data weeks[] 與  static Data weeks[] 

代碼一會在記憶體中儲存20000個weeks的副本,而代碼二則在記憶體中儲存1個weeks的副本,然後共用該副本,這樣的話就不會造成記憶體的浪費。

雖然 靜態變數能節約大量的記憶體,但是並不是所有的地方都適合用,建議大家在下列條件都符合的情況下,盡量用靜態變數:

(1)變數所包含的對象體積較大,佔用記憶體較多。

(2)變數所包含的對象生命週期較長。

(3)變數所包含的對象資料穩定。

(4)該類的對象執行個體有對該變數所包含的對象的共用需求。

如果變數不具備上述特點,建議不要輕易使用靜態變數,以免弄巧成拙。

最後,再提一點記憶體的最佳化,就是有關對象的重用,比如:對象池和資料庫連接池等。那樣的話,是很節約記憶體空間的,不過,在用的時候要考慮各個方面,比如:運行環境的記憶體資源的限制等。為了防止對象池中的對象過多,要記得清除。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.