java中的finalize()
Java的垃圾回收器在回收某个对象的内存之前,会调用finalize()方法进行资源清理。
如果程序在终止之前始终没有进行垃圾回收,那么对象的finalize()是始终不会调用的。
关于finalize()我们有以下几点说明:
- 1.永远不要主动的去掉用对象的finalize(),交给垃圾回收机制去调用
- 2.finalize()是否被调用和何时被调用都有不确定性
- 3.如果JVM执行可恢复对象的finalize(),可能会使得该对象重新变成可达状态
- 4.如果JVM执行finalize方法时出现异常,垃圾回收机制不会报告异常,程序继续执行
public class StringDemo { private static StringDemo demo = null; public static void main(String[] args) { System.out.println("new=" + new StringDemo()); System.out.println("new=" + new StringDemo()); System.out.println("new=" + new StringDemo()); System.gc(); System.runFinalization(); demo.info(); } public void info() { System.out.println("-----info-----"); } @Override protected void finalize() throws Throwable { demo = this; System.out.println("this=" + this); System.out.println("demo=" + demo); } }
下面是程序运行的结果
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。