简单的说一下吧。在main函数中 while(!Chair.f) { new Chair(); new String("To take up space"); } 这个循环不断地生成Chair和String的对象,这个过程不断地分配资源,当系统资源被用到一定的时候,jvm就会用调用garbage collector, 用finalize()函数来回收被分配出去而且在后面不会再引用的资源。其实你可以理解为java在后台自动地为你回收资源。 注意在finalize()中,每释放一个对象,变量fianlized++,所以它就会变成32491了
当created的值是3374了(也就是i的值),就打印了Beginning to finalize after 3374 Chairs have been created,那后面的if(i==47)就打印Finalizing Chair #47, Setting flag to stop Chair creation怎么还会执行呢?那到底是什么时候才执行finalize()的?
finalized 是一个static变量,而i却不是。 当垃圾开始回收的时候,他开始一个个回收,当回到到i=49的这个对象的时候,它就会打印出Finalizing Chair #47, Setting flag to stop Chair creation这句话,可是他还在继续回收别的chair而总共产生的chair就是那个staitc变量finalized 了
while(!Chair.f) {
new Chair();
new String("To take up space");
}
这个循环不断地生成Chair和String的对象,这个过程不断地分配资源,当系统资源被用到一定的时候,jvm就会用调用garbage collector, 用finalize()函数来回收被分配出去而且在后面不会再引用的资源。其实你可以理解为java在后台自动地为你回收资源。
注意在finalize()中,每释放一个对象,变量fianlized++,所以它就会变成32491了
当垃圾开始回收的时候,他开始一个个回收,当回到到i=49的这个对象的时候,它就会打印出Finalizing Chair #47, Setting flag to stop Chair creation这句话,可是他还在继续回收别的chair而总共产生的chair就是那个staitc变量finalized 了
这是我的想法,大家交流一下!
System.out.println(
"Finalizing Chair $47, " +
"Setting flag to stop Chair creation");
}
那个finalized会减少一次,这个怎么会这样的,还有就是,是不是只有把垃圾都回收完后才执行System.out.println(
"After all Chairs have been created:\n" +
"total created = " + Chair.created +
", total finalized = " + Chair.finalized);
关注中…………