首页 理论教育 Java程序设计中的垃圾回收机制及其过程

Java程序设计中的垃圾回收机制及其过程

时间:2023-11-16 理论教育 版权反馈
【摘要】:针对这种情况,Java 中引入了垃圾回收机制。有了这种机制,程序员不需要过多关心垃圾对象回收的问题,Java 虚拟机会自动回收垃圾对象所占用的内存空间。虽然通过程序可以控制一个对象何时不再被任何引用变量所引用,但是却无法精确地控制Java 垃圾回收的时机。除了等待Java 虚拟机进行自动垃圾回收外,还可以通知系统垃圾回收器进行垃圾回收。接下来通过一个案例来演示Java 虚拟机进行垃圾回收的过程,如文件5-39 所示。

Java程序设计中的垃圾回收机制及其过程

在Java 中,当一个对象成为垃圾后仍会占用内存空间,时间一长,就会导致内存空间的不足。针对这种情况,Java 中引入了垃圾回收机制。有了这种机制,程序员不需要过多关心垃圾对象回收的问题,Java 虚拟机会自动回收垃圾对象所占用的内存空间。

对象在没有任何引用可以到达时,生命周期结束,成为垃圾。一个对象在彻底失去引用成为垃圾后会暂时地保留在内存中,是不会被马上回收的,当这样的垃圾堆积到一定程度时,Java 虚拟机就会启动垃圾回收器将这些垃圾对象从内存中释放,从而使程序获得更多可用的内存空间。

虽然通过程序可以控制一个对象何时不再被任何引用变量所引用,但是却无法精确地控制Java 垃圾回收的时机。除了等待Java 虚拟机进行自动垃圾回收外,还可以通知系统垃圾回收器进行垃圾回收。

通知系统回收器的方式:

● 调用System 类的gc()静态方法:System.gc()。

● 调用Runtime 对象的gc()实例方法:Runtime.getRuntime.gc()。

以上两种方式可以通知启动垃圾回收器进行垃圾回收,但是否立即进行垃圾回收依然具有不确定性。多数情况下,执行后总是有一定的效果。(www.xing528.com)

(1)当一个对象在内存中被释放时,它的finalize()方法会被自动调用,finalize()方法是定义在Object 类中的实例方法。

(2)任何Java 类都可以重写Object 类的finalize()方法,在该方法中清理该对象占用的资源。如果程序终止之前仍然没有进行垃圾回收,则不会调用失去引用对象的finalize()方法来清理资源。

(3)只有当程序认为需要更多的额外内存时,垃圾回收器才会自动进行垃圾回收。

【例5.37】接下来通过一个案例来演示Java 虚拟机进行垃圾回收的过程,如文件5-39 所示。

文件5-39 Example39.java

执行结果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈