先看代码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还在运行 内存回收不了啊 小弟不太明白啊 分数比较少大家谅解啊 呵呵
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还在运行 内存回收不了啊 小弟不太明白啊 分数比较少大家谅解啊 呵呵
你只能建议JVM来回收,但不能强迫它来回收。
并不是你主动调用了finalize方法,就会回收内存
什么时候回收内存是不确定
2.finalize本身作为一个方法是可以在任何可见的地方运行的。
3.一般情况下垃圾回收是jvm做的,但并不绝对,所以上面说的并不全面,程序里面调用System.gc()还是可以手动回收的。