使用gc()方法后不调用Java finalize()方法吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用gc()方法后不调用Java finalize()方法吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1866字,纯文字阅读大概需要3分钟。
内容图文
为了查看java中的finalize()方法的工作情况(当对象即将被销毁时会被调用),我编写了以下程序
class counterTest{
public static int count;
public counterTest(){
count++;
}
}
public class finalize {
public static void main(String args[]){
counterTest obj1=new counterTest();
System.out.println("Number of objects :" + counterTest.count);
counterTest obj2=new counterTest();
System.out.println("Number of objects :" + counterTest.count);
Runtime rs=Runtime.getRuntime();
obj1=null;
obj2=null;
rs.gc();
}
protected void finalize(){
System.out.println("Program about to terminate");
counterTest.count--;
System.out.println("Number of objects :" + counterTest.count);
}
}
我期望输出是这样的
Number of objects :1
Number of objects :2
Program about to terminate
Number of objects :1
Program about to terminate
Number of objects :0
但是我只是得到前两行.因为我要使对象引用为null,然后调用gc()方法,所以我希望应该显示在finalize()方法内部编写的语句.这是否意味着不能保证每次使用gc()方法时都会调用finalize()方法.
解决方法:
您的finalize方法应该在counterTest中,然后“也许”被调用.您永远不会真正创建“ finalize”类的实例.因此,您的finalize方法永远不会有执行的机会.
这是更新的代码,可以按您期望的方式工作:
class counterTest{
public static int count;
public counterTest(){
count++;
}
protected void finalize(){
System.out.println("Program about to terminate");
counterTest.count--;
System.out.println("Number of objects :" + counterTest.count);
}
}
public class Finalize {
public static void main(String args[]){
counterTest obj1=new counterTest();
System.out.println("Number of objects :" + counterTest.count);
counterTest obj2=new counterTest();
System.out.println("Number of objects :" + counterTest.count);
Runtime rs=Runtime.getRuntime();
obj1=null;
obj2=null;
rs.gc();
}
}
应该注意的是,“ finalize”方法并不可靠,因为它们并不可靠.您永远都不知道垃圾收集器何时收集特定对象,因此在其上进行中继以关闭数据库连接或执行其他类似操作是不,不,不…
内容总结
以上是互联网集市为您收集整理的使用gc()方法后不调用Java finalize()方法吗?全部内容,希望文章能够帮你解决使用gc()方法后不调用Java finalize()方法吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。