当java仍然在范围内时,java能否最终确定它?我一直在研究我的代码中的一个错误,似乎是由一些“丑陋的”终结器代码引起的。代码看起来大致如此public class A {
public B b = new B();
@Override public void finalize() {
b.close();
}}public class B {
public void close() { /* do clean up our resources. */ }
public void doSomething() { /* do something that requires us not to be closed */ } }void main() {
A a = new A();
B b = a.b;
for(/*lots of time*/) {
b.doSomething();
}}我认为正在发生的事情是a在第二行之后被检测到没有引用main()并且被终结器线程获得GC并最终确定 - 当for循环仍然发生时,使用bwhile a仍然是“在范围内”。这有可能吗?是否允许java在对象超出范围之前将其作为对象?注意:我知道在终结器中做任何事情都很糟糕。这是我继承并打算修复的代码 - 问题是我是否正确理解了根本问题。如果这是不可能的,那么更微妙的东西必定是我的bug的根源。
添加回答
举报
0/150
提交
取消