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 在記憶體中, 那麼這部分的資源就只能等待應用程式關閉而釋放了。