废话很少说,如下附代码:java
import java.util.Iterator;
import java.util.Vector;jvm
public class Test {
int i;指针
public static void main(String[] args) {
Vector v = new Vector(10);
for (int i = 1; i < 100; i++) {
Test o = new Test();
o.i = 11;
v.add(o);//
o.i = 10;
o = null;
//只是将对象指针设置为null,由于vector集合强引用了可是o指向的内存没有被回收,其实至关于new的o对象一直保持着集合里面有个指针指向了这个对象的内存空间
if(o!=null){
System.out.println("o.i=="+o.i);
}
}
Iterator<Object> i = v.iterator();
while (i.hasNext()) {
System.out.println(String.valueOf(((Test) i.next()).i));
}
}
}对象
这儿打印的值:生命周期
10内存
10虚拟机
....it
在网上看到这个别人提问题后,本身回想了下java的回收,将对象置于null,其实只是建议咱们的jvm虚拟机若是没有其余对象强引用它,它将会被jvm回收。class
这儿问题import
o = null;
可是o给装在了集合,其实集合里面也会有有一个对应地址,或者说指针,可能说的不太严格,指向了这个内存,因此这时候jvm是不会回收对象o,只是o这个存在栈里面的变量可能会很快被回收。
因此打印出来的值 对象的i值必定是存在的。
从另外个角度说,集合的生命周期比装在集合里面的对象obj生命周期长,只有集合被置为null,被回收后,里面的对象才会真正被回收。
很小的问题,不过对于咱们理解java的强应用和回收问题是有收获的。
有什么说的不对的问题,还请各位看官多多提问。