请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于活跃线程所引用的对象

老师您好,有两个问题想要请教

  1. 类的成员变量所引用的对象为什么没有作为GC ROOT呢
  2. 看了您之前对同学提问的回答 :

“而活跃线程引用的对象则有可能是方法中new出的对象,也有可能是外部new出来的对象,然后被线程的方法所引用到”

可否对 "外部new出来的对象,然后被线程的方法所引用到” 这句话用具体的代码讲解一下呢,感谢!

正在回答 回答被采纳积分+3

1回答

翔仔 2019-12-27 14:58:05

同学好,

  1. 可以反推一下,GC本身就是为了回收没用的对象实例的,成员变量所引用的对象如果作为GC Root,那么当前对象便会一直存在没法进行回收了,所以要成为GC Root,那么该对象必须是要么是静态的,要么是方法执行完成后就会被确定清除的,也就是具备确定性

  2. 其实就是不在方法里面创建的对象,就好比是静态成员变量引用的对象,就当做是外部的对象

0 回复 有任何疑惑可以回复我~
  • 老师好,这个“外部new出来的对象”是不是已经可以包含在前面几条中了呢?还是有什么特殊情况,是上面几条没涵盖到的呢?望老师求解
    回复 有任何疑惑可以回复我~ 2020-03-23 21:33:07
  • 翔仔 回复 ShiveryMoon #2
    同学好,我不太记得上下文了,请问同学说的包含在前几条指的是哪几条呀
    回复 有任何疑惑可以回复我~ 2020-03-24 02:10:15
  • 慕UI6331297 回复 翔仔 #3
    老师好,我也有同样的疑问,前几条指的是1.虚拟机栈中引用的对象,2.方法区中的常量引用的对象,3.方法区中静态变量引用的对象,4.本地方法栈中引用的对象。您上面的回答中说 “静态成员变量引用的对象,就当做是外部的对象”,这个静态成员变量就是方法区中的静态变量吧,那是否可以归为第3种。
    回复 有任何疑惑可以回复我~ 2020-03-26 22:15:36
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信