是什么决定了垃圾收集器何时真正收集?它是在一定时间之后还是在一定数量的内存用完之后发生的吗?还是还有其他因素?
3 回答
慕桂英3389331
TA贡献2036条经验 获得超8个赞
当JVM没有足够的内存空间来运行时,垃圾收集器将运行并删除不必要的对象,并为JVM分配内存。
不必要的对象是没有引用(地址)的对象。
符合垃圾收集器条件的对象主要有4点。
空引用
当对象的引用变量的值分配为null时,垃圾收集器可以删除该对象
A a = new A();
a = null;
重新分配
当将另一个对象分配给对象的引用变量时,较旧的引用对象可以由垃圾回收器删除。
A a = new A(100);
a =new A(200);
当地范围
如果在块内创建对象,则该对象可以在该块外进行垃圾回收。
if(condition){
A a = new A();
}
隔离
一个对象可以引用另一个对象,但是堆栈中的这些对象必须至少有一个引用(地址)变量,否则所有这些对象都可以进行垃圾回收。
class A{
A r;
A(int i){
//something
}
}
A a1 = new A(100);
a1.r = new A(101);
a1.r.r = new A(102);
a1.r.r.r = a1;
a1 = null //all ojects are eligible to garbage collector
添加回答
举报
0/150
提交
取消