Instance object 與 Static object 記憶體觀念

Instance object 與 Static object 記憶體觀念

參考: http://www.oreilly.com.tw/column_sleepless.php?id=j021

class  field     = class 中儲存資料相關的程式, ex: collection, array, int variable… 等

class  method = class 中的程式部份, ex: function 等

 

Instance object :

只要 new 出一個 Instance, 所有 Class Member( field 與 method ) 就會產生一份放在記憶體中,

若再 new 同一個 class 一次(產生了新的 Instance), 則該 class 的所有 field 會再產生一份放在記憶體中,

而 class method 就不會再產生一份了(除非前一個 Instance 已經被記憶體回收了, 那麼就會在產生一份 class method ),

因為 class method 在執行時不會被變更, 因此 JVM 只會產生一份在記憶體中。

所有 Class Member 皆會跟著 Instance 存亡。

 

Static object :

所有宣告成 static 的 object 皆會因 class (內含 static 成員或 class 就是 static) 被載入而將所有 static object 產生一份在

記憶體中, 所有 static object 皆會隨著應用程式(appcation)存亡。

 

心得:

若有 webservice 或 web form 相關的程式(在 Server 中 Run 的程式) 不適宜用 Static, 因為曾經遇過越多人連上同時使用

static 程式時會有偶發性例外, 可能是塞車了吧, 原本以為是 Web Server 或相關設定問題, 可是還是無法徹底解決,

最後把出錯部分程式的 static 拿掉, 問題沒有再發生了…

 

如果是 winform 那可以適程式方便性與結構設定 static, 因 static object 會隨著應用程式(appcation)存亡, 因此一旦 static

object 在記憶體中, 那麼這部分的資源就只能等待應用程式關閉而釋放了。