垃圾收集问题?

myjoy 2002-03-12 01:27:51
finalize()方法是自定义的吗?
Bruce Eckel的东西是太高深了?还是翻译就是个不懂?
...全文
51 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
javalearner 2002-03-12
  • 打赏
  • 举报
回复
java虚拟机只保证finalize()方法一定被执行,但并不保证执行的时刻,也就是说有可能在出现问题前,该方法并没有执行。通常情况下,不需要覆盖这个方法,gc机制能比较完美的解决资源回收的问题,但是,如果你的对象使用了内存以外的其他系统资源,比如,图形上下文,文件或者网络连接,这个时候就需要你自己手动对这些资源进行管理。java的finalization系统提供了简单的-通知服务-让你来决定如何释放占用的资源,finalization系统的核心就是finalize()方法。java虚拟机会遵照一下顺序:
1。应用程序已经删除了最后一个指向对象的引用
2。虚拟机调用对象的finalize()
3。虚拟机的gc来回收
这些机制在不同的java虚拟机上有不同的实现,你不用考虑太多。
虎叔 2002-03-12
  • 打赏
  • 举报
回复
运行以下的代码就可以看见垃圾收集器回收对象之前就会调
用finalize()方法。注意:System.gc();强制垃圾回收!

=======================================
public class A{
int i;
A(int i1){
i = i1;
}
protected void finalize(){
System.out.println("I am " + i + " Object");
}
public static void main(String[] s){
new A(1);
System.gc();
new A(2);
System.gc();
new A(3);
System.gc();
new A(4);
System.gc();
new A(5);
System.gc();
new A(6);
System.gc();
A a = new A();
B b = a;
}
}
Luke_cn 2002-03-12
  • 打赏
  • 举报
回复
finalize():在垃圾收集器工作时会首先调用这个方法,但只会执行一次。
它可以自己定义,但最好在其中先调用Object类的finalize方法,然后进行自己定义的处理。
ahbill 2002-03-12
  • 打赏
  • 举报
回复
finalize()方法是本身就有的
用于在垃圾回收之前,手工做一些释放的工作
如关闭文件流
关闭数据库连接等等
典型使用方法:
try{
}catch{
}finalize{
}

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧