2008年9月22日 星期一

java 的記憶體配置

了解 java 記憶體的配置,有助於程式撰寫的 performance tuning

首先以變數的角度來說明:
1. heap variable:
class variable(method 之外並加上 static 的修飾字)、instance variable、array component。
這類變數會自動被 JVM 初始化成預設值。

2. stack variable:
通稱廣義的區域變數,其佔用的記憶體在 stack 中,這類變數包括了狹義的區域變數(宣告在 method 內的變數)、
method parameter、exception-handler parameter、constructor parameter。此類變數會被 JVM 初始化成傳入值。
而狹義的區域變數不會被 JVM 初始化成預設值,使用者必須自行初始化該變數。

下列是以記憶體的配置來探討:
1. heap (dynamic memory allocate):
是動態配置記憶體空間,且可以隨時配置,由JVM負責。
只要是用new 產生的oject都是存放在heap中,且通常用一個存放在stack的reference 來指向這個oject
compiler 不會知道這個從heap中獲得多少空間,也不會知道其配置到的空間會存放多久。

2. stack (stack allocation):
其 Life cycle 會受到block scope的影響,當進入block時,會自動配置記憶體空間,離開這個SCOPE時,其記憶體配置就會隨之消失。
可以將object的reference 儲存於stack內。

Reference:
http://www.oreilly.com.tw/column_sleepless.php?id=j015
http://www.javaworld.com.tw/jute/