Re: [問題] object指向null後 class variable怎麼辦?
※ 引述《tkcn (小安)》之銘言:
: ※ 引述《johjimakenji (喬治馬健司)》之銘言:
: : 如果想要刪除一個object 就是令它指向null
: : 但如果該物件裡包含class varible
: : 例如 public static int sum = 0;
: : 每new一次這個object就會sum++ 用來計算總共有幾個object
: : 但如果把object指向null sum的值並不會改變
: : 請問有什麼辦法解決?
: : 就是想要刪除這個object並讓sum的值正確
: 寫個 finalize method 吧,
: 這樣當 GC 去回收此物件時,就會執行到 finalize 了。
: 不過要注意一點,
: 並不是將 reference 設成 null,GC 就會立刻回收該物件。
: 所以如果你希望將 reference 設成 null 時,sum 能立刻反應,
: 還是自己寫 --sum 吧。
使用finalizer是絕對不智的
JVM內thread執行finalizer的priority通常很低
Java的spec甚至沒有規定finalizer一定會被執行
甚至可能JVM結束了,finilizer都不會被執行到
如果想要有一個統計總共有幾個instance的資訊
1. 最簡單的方式是使用Collection來裝這些instance,不用了就把它remove掉
或者
2. 使用一個private的變數來記錄這個instance是否已經不再需要,
如果這instance不要了,就把這個變數設為false,然後--sum,但是每個client
要使用這類class時,要先check這個instance是否合法,要把它丟掉的時候
設為false
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.23.102
討論串 (同標題文章)