2011年9月11日 星期日

[Java] Static variable

電腦的記憶體在執行程式時, 會被分成三區: permanent, stack 和 heap。
  • permanent: 變數會一直活到程式執行完。
  • stack:
    • 變數則是在{}執行完就被移除。
    • ex: 用來存放function return address和function的local variables(包括參數)及保存暫存器值的記憶體空間。
    • ex: local variable既然在{}外的程式都看不到他, 很自然的選則就是在離開{}後就把他清掉, 好節省記憶體。
  • heap: 程式中動態配置記憶體所用的記憶體空間。


BSS(block storage segment): 用來存放程式中未初始化的全域變數的空間。
Data Segment: 用來存放已初始化的全域變數。
Text Segment: 用來存放程式碼(固定不變的部分)。

Data Segment and Text Segment 兩塊記憶體大小在程式執行前就固定了。

Static Variable
  • 在執行程式其間,此變數是共享的,所以可以節省系統空間與共享資源。
  • 生命周期較長,而且不易被系统回收,因此如果不能合理地使用Static Variable,就會是反效果,造成大量的空間浪費。
  • 因此,建議在符合以下所有條件時,才考慮使用Static Variable:
    • 會占用較多的空間。
    • 生命週期較長。
    • 所包含的數據穩定。
    • 有共享需求。



* Reference
- 程式記憶體位址的配置 - 程式專欄 - Yahoo!奇摩部落格
- java static静态变量 - - ITeye技术网站

沒有留言:

張貼留言