有看过孙鑫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一定会执行。