菜鸟问题 请高手解答

zjb19870616 2009-09-22 07:55:25
先看代码

public class ttt {

ttt() {
finalize();

}

public void str() {
System.out.print("123");
}

protected void finalize() {
System.out.print("456");
}

public static void main(String[] args) {
// TODO 自动生成方法存根
ttt t=new ttt();
t.str();
}

}

问一下 既然finalize 是回收内存 问什么 t.str还能运行啊 而且能在构造还输里面运行啊 是不是ttt还在运行 内存回收不了啊 小弟不太明白啊 分数比较少大家谅解啊 呵呵
...全文
177 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
heixia2025 2009-09-23
  • 打赏
  • 举报
回复
1.finalize这个方法的作用并不是回收内存,一般而言垃圾回收时JVM控制的,但是jvm回收垃圾之前会调用到finalize这个方法,这就允许你在垃圾回收之前做一些准备工作写在finalize里面。
2.finalize本身作为一个方法是可以在任何可见的地方运行的。
3.一般情况下垃圾回收是jvm做的,但并不绝对,所以上面说的并不全面,程序里面调用System.gc()还是可以手动回收的。
lifeiscool 2009-09-23
  • 打赏
  • 举报
回复
finalize这个方法的作用并不是回收内存,一般而言垃圾回收时JVM控制的,但是jvm回收垃圾之前会调用到finalize这个方法,这就允许你在垃圾回收之前做一些准备工作写在finalize里面。
lliiqiang 2009-09-23
  • 打赏
  • 举报
回复
用户是不能回收对象的,但是可以运行垃圾回收前的方法finalize()
cseu 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 heixia2025 的回复:]
1.finalize这个方法的作用并不是回收内存,一般而言垃圾回收时JVM控制的,但是jvm回收垃圾之前会调用到finalize这个方法,这就允许你在垃圾回收之前做一些准备工作写在finalize里面。
2.finalize本身作为一个方法是可以在任何可见的地方运行的。
3.一般情况下垃圾回收是jvm做的,但并不绝对,所以上面说的并不全面,程序里面调用System.gc()还是可以手动回收的。
[/Quote]
heixia2025说的大体正确,但调用System.gc()也并不能保证垃圾回收的执行。
gesanri 2009-09-22
  • 打赏
  • 举报
回复
java中的垃圾回收是你控制不了的,你可以调用finalize来进行垃圾回收,但它不保证会立即执行,只有jvm觉得要执行了才会执行,因为垃圾回收的开销比较大,所以它的优先级比较低,在必要的时候才会执行它,而不是你想让它回收它就回收
swandragon 2009-09-22
  • 打赏
  • 举报
回复
finalize是回收内存之前调用的一个方法
并不是你主动调用了finalize方法,就会回收内存
什么时候回收内存是不确定
若鱼1919 2009-09-22
  • 打赏
  • 举报
回复
回收内存是JVM的事,即使你调用了finalize函数,也不一定保证立马就能得到执行。
你只能建议JVM来回收,但不能强迫它来回收。

62,621

社区成员

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

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