终结处理和垃圾回收

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了终结处理和垃圾回收相关的知识,希望对你有一定的参考价值。

   之前一直不了解Java的垃圾回收原理,最近看了Java编程思想,有点想法,做做笔记。

    首先,我们都了解初始化的重要性,但是常常会忘记同样也重要的清理工作。Java有垃圾回收器负责回收无用对象占用的内存资源。但是也有特殊情况:假定你的对象(并非使用new)获得一块“特殊”的内存区域,由于垃圾回收器只知道释放那些经由new分配的内存,所以它不知道如何释放该对象的这块特殊内存。为了应对这种情况,Java允许在类中定义一个名为finalize()方法。

    Java的finalize()不同于C++里的析构函数:

    1.对象可能不被垃圾回收,

    2.垃圾回收并不等于析构。

   所以在Java中你不需要某个对象之前,如果必须执行某些动作,那么必须手动创建一个方法去做这些操作。

    那么finalize9)真正用处是什么?这里引出第三点:

    3.垃圾回收只与内存有关。

    也就是说,使用垃圾回收器唯一的原因是为了回收程序不再使用的内存。之所以要有finalize(),是由于再分配内存时可能采用了类似C语言的做法,而非Java中的通常做法。这种情况主要发生在使用“本地方法”的情况下,本地方法是一种在Java中调用非Java代码的方式。本地方法目前只支持C和C++,但是它们可以调用其他语言写的代码,所以实际上可以调用任何代码。在非Java代码中你也许会调用C的malloc()函数系列来分配存储空间,而且除非调用了free()函数,否则存储空间将得不到释放,从而造成内存泄漏。而这些需要在finalize()中用本地方法调用它。

    所以通常我们的“清理”工作并不能指望finalize()方法。

本文出自 “13017115” 博客,请务必保留此出处http://13027115.blog.51cto.com/13017115/1967089

以上是关于终结处理和垃圾回收的主要内容,如果未能解决你的问题,请参考以下文章

TIJ读书笔记06-终结清理和垃圾回收

53.垃圾回收算法的实现原理启动Java垃圾回收Java垃圾回收过程垃圾回收中实例的终结对象什么时候符合垃圾回收的条件GC Scope 示例程序GC OutOfMemoryError的示例

C#关于垃圾回收 终结器IDispose的设计规范札记

Jvm垃圾回收器(终结篇)

终结 finalize()和垃圾回收(garbage collection)

java回收finalize方法的作用(编程思想)