Java清除:收尾和垃圾收集详解编程语言
2023-06-13 09:20:46 时间
垃圾收收集器(GC)只知道释放由new关键字分配的内存,所以不知道如何释放对象的“特殊”内存。为了解决这个问题,Java提供了一个名为:finalize()的方法,可为我们的类定义它。
理想情况下finalize()方法的工作原理是这样:一旦CG准备好释放对象占用的内存空间,它首先调用finalize()方法,而且只有在下一次的垃圾收集过程中,才会真正回收对象的内存。
GC != Destructor,垃圾收集器并不等于破坏器。
为强制进行收尾工作(执行除释放对象存储空间之外的其它某种形式的清除工作),可先调用System.gc(),再调用System.runFinalization()。这样可清除到目前为止没有使用的所有对象。这样做一个稍显奇怪的地方是在调用runFinalization()之前调用gc(),这看起来似乎与Sun公司的文档说明有些抵触,它宣称首先运行收尾模块,再释放存储空间。然而,若在这里首先调用runFinalization(),再调用gc(),收尾模块根本不会执行。
针对所有对象,Java1.1有时之所以会默认为跳过收尾工作,是由于它认为这样做的开销太大。不管用哪种方法强制进行垃圾收集,都可能注意到比没有额外收尾工作时较长的时间延迟。
finalize()最有用处的地方之一是观察垃圾收集的过程
public class Garbage { public static void main(String[] args) { while (!Chair.f) { new Chair(); new String("To take up space"); System.out.println("After all Chairs have been created:/n" + "total created = " + Chair.created + ", total finalized = " + Chair.finalized); System.out.println("gc():"); System.gc(); System.out.println("runFinalization():"); System.runFinalization(); System.out.println("bye!"); public class Chair { static boolean gcrun = false; static boolean f = false; static int created = 0; static int finalized = 0; int i; public Chair() { i = ++created; if (created == 47){ System.out.println("Created 47"); protected void finalize(){ if (!gcrun){ gcrun = true; System.out.println("Beginning to finalize after chairs been created."); System.out.println("i=" + i); System.out.println("created=" + created); if (i == 47){ System.out.println("Finalize chair #47,setting flag to stop chair creation."); f = true; finalized++; if (finalized = created){ System.out.println("All finalized."); }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/16008.html
cjava相关文章
- Java爱心代码_java怎么敲入代码
- import java.io 是什么意思_Java IO 详解
- java压缩与解压(Java.util.zip)详解编程语言
- 使用POI向excel中写入图片的java代码详解编程语言
- java获取当前月第一天和最后一天,上个月第一天和最后一天详解编程语言
- java 一个简单的无需第三方包的获取网页内容的代码详解编程语言
- java 创建一个JDBC表格模型详解编程语言
- java中可以通过调用ping命令来判断网络是否连接正常详解编程语言
- Java实现倒计时代码详解编程语言
- Java 发送http post 请求详解编程语言
- Java IO流学习详解编程语言
- Java Socket获取本机的InetAddress实例详解编程语言
- 2018年Java展望详解编程语言
- java基础之泛型详解编程语言
- 【数据结构】之队列的java实现(一)详解编程语言
- Java IO详解(五)——包装流编程语言
- JAVA线程sleep和wait方法区别详解编程语言
- java实现MD5加密详解编程语言
- Java与Oracle联手构建数据库新世界(java和oracle)
- Linux系统如何配置Java?(linux下配置java)