日期:2014-05-20  浏览次数:20686 次

有看过孙鑫java 12cd视频教程的朋友进来看一下.
大家好,最近看孙鑫的java   12cd视频教程的时候看到第3CD中的时候(CD播放时候为:
1小时56分38秒的时候有这样一个例子如下:
class   Garbage
{
int   index;
static   int   count;
Garbage()
{
count++;
System.out.println( "object     "   +   count   +   "     construct! ");
setId(count);
}
void   setId(int   id)
{
index=id;
}
protected   void   finalize()
{
System.out.println( "object   "   +   index   +   "   is   reclaimed! ");
}
public   static   void   main(String[]   args)  
{
new   Garbage();
new   Garbage();
new   Garbage();
new   Garbage();
System.gc();
}
}
我的输出结果为:
object     1     construct!
object     2     construct!
object     3     construct!
object     4     construct!
object   4   is   reclaimed!
object   3   is   reclaimed!
object   2   is   reclaimed!
object   1   is   reclaimed!
请按任意键继续.   .   .
而孙鑫的视频教程上输出为:
object     1     construct!
object     2     construct!
object     3     construct!
object     4     construct!
object   1   is   reclaimed!
object   2   is   reclaimed!
object   3   is   reclaimed!
object   4   is   reclaimed!
请按任意键继续.   .   .

请大家看看是怎么回事呢?应该是后建立的对象先回收才对啊?我这个结果应当是正确的啊?怎么孙鑫的视频上的输出结果和我不一样呢?奇怪!

------解决方案--------------------
我的也是4321

是不是因为JDK版本差异?

装个1.4.2试试吧
------解决方案--------------------
垃圾回收机制的先后顺序,关注中.支持一下
------解决方案--------------------
JDK或着的UltraEdit //很可能JDK
------解决方案--------------------
恩。关注
------解决方案--------------------
我有时是1432,有时是4321,就是说明回收方式不是固定的.你要看下垃圾回收器的基本原理是什么.
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是 "可达的 ",哪些对象是 "不可达的 "。当GC确定一些对象为 "不可达 "时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。