上面第三行错了,应该是: 如果是这样,直接把 f = true放到finalize结尾不就可以了吗?
垃圾回收器只回收那些不再使用的对象,与创建对象没有关联。 请楼主在仔细看看垃圾回收器运作方式这个篇幅,垃圾回收器会从stack和static storage两个存储空间上的reference进行深层遍历,追踪不到的对象才会被回收。 String s = new String("now i'm going to dead!"); s = null; 那么在确保没有reference指针指向的情况下,这个字符串就真正死亡了,等待垃圾回收器来回收其空间。 如果从底层reference也遍历不到的reference集同样也会被回收,包括它们指向的对象内存空间。
如果是这样,直接把 f = true放到finalize结尾不就可以了吗?
请楼主在仔细看看垃圾回收器运作方式这个篇幅,垃圾回收器会从stack和static storage两个存储空间上的reference进行深层遍历,追踪不到的对象才会被回收。
String s = new String("now i'm going to dead!");
s = null;
那么在确保没有reference指针指向的情况下,这个字符串就真正死亡了,等待垃圾回收器来回收其空间。
如果从底层reference也遍历不到的reference集同样也会被回收,包括它们指向的对象内存空间。
你没有看懂我的意思,我问的不是什么情况下回收(这点书上已经讲的很清楚了),我问的是垃圾回收器在回收那些不再使用的对象的同时,系统是否还会创建新的对象,即创建对象和垃圾回收是否可以交错运行。如果可以,书上那句if i==47的时候停止创建对象的话不就是多余的吗.你说的“垃圾回收器只回收那些不再使用的对象,与创建对象没有关联”我觉得不对,因为从上面的程序看,在回收第一个到第5000个对象的时候,总的对象数没有增加,我觉得此时候对象创建被暂停了。