欢迎访问服务器技术网-www.fuwuqijishu.com

关于java 垃圾回收机制的

程序设计 fuwuqijishu 2年前 (2022-10-01) 11次浏览 0个评论 扫描二维码

关于题目是这样的
public class Tahiti {
Tahiti t;
public static void main(String args[]) {
Tahiti t = new Tahiti();
Tahiti t2 = t.go(t);
t2 = null
// more code here
}

Tahiti go(Tahiti t) {
Tahiti t1 = new Tahiti();
Tahiti t2 = new Tahiti();
t1.t = t2;
t2.t = t1;
t.t = t2;
return t1;
}
}

问题是执行到more code here 那的时候 有几个对象适合被垃圾回收
正确答案是零个 我就疑惑了 t1 t2 不是方法中声明的类么 方法结束了t2 = null之后还不回收么?的问题

看这里:
Tahiti t1 = new Tahiti();
Tahiti t2 = new Tahiti();
t1.t = t2;
t2.t = t1;
t.t = t2;
return t1;
这里有三个对象:t,t1,t2,t1和t2循环引用,t又引用了t2,并将t1返回,此时三个变量循环引用,
因此从方法go返回后,t1、t2由于循环引用,而且t2又被main中的t所引用,因此他们之间引用计数军大于0,不具备回收条件

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

Warning: error_log(/www/wwwroot/fuwiqijishu/wp-content/plugins/spider-analyser/#log/log-2418.txt): failed to open stream: No such file or directory in /www/wwwroot/fuwiqijishu/wp-content/plugins/spider-analyser/spider.class.php on line 2900