作者petr (petr)
看板java
标题Re: [问题] object指向null後 class variable怎麽办?
时间Fri Nov 13 14:27:36 2009
※ 引述《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