Dor*_*thy 14 java garbage-collection
在下面的代码中,给定amethod
已被调用.在什么点/行是最初引用的对象myObject
,有资格获得垃圾收集?
class Test {
private Object classObject;
public void amethod() {
Object myObject = new Object();
classObject = myObject;
myObject = null;
}
}
Run Code Online (Sandbox Code Playgroud)
如果classObject
或者amethod
有一个公共,受保护,默认或静态的访问修饰符,它会影响对象符合垃圾收集的条件吗?如果是这样,它将如何受到影响?
classObject = myObject;
将被优化,并且myObject = null;
它有资格获得垃圾收集.kol*_*sus 18
在丢弃对它的所有引用之前,该对象不会成为垃圾收集的候选对象.Java对象是通过引用分配的,所以当你有
classObject = myObject;
Run Code Online (Sandbox Code Playgroud)
您为堆上的同一对象分配了另一个引用.所以这一行
myObject = null;
Run Code Online (Sandbox Code Playgroud)
只删除一个引用.要成为myObject
垃圾收集的候选人,你必须拥有
classObject = null;
Run Code Online (Sandbox Code Playgroud)
摘自《OCA Java SE 7》一书
\n\n当对象无法再被访问时,该对象将被标记为有资格进行垃圾收集,当对象超出范围时,就会发生这种情况。当对象\xe2\x80\x99s 引用变量被分配显式空值或重新初始化时,也会发生这种情况。
\n
归档时间: |
|
查看次数: |
19679 次 |
最近记录: |