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 在内存中, 那么这部分的资源就只能等待应用程序关闭而释放了。