我读到了方法finalize(),即在释放内存之前由垃圾收集器调用。 从文档中,finalize用于进行清理活动。但是什么"东西"在这个"清理活动"
中进行清理答案 0 :(得分:4)
典型的清理类型是释放实例已分配的任何系统资源,例如FileInputStream
的文件描述符。
请注意,一个好的Java程序永远不会依赖于在对象的终结器中执行的清理,而是明确要求对象在其使用到期时释放资源。
遗憾的是,JDK中有一些丑陋的例子,其中终结器是唯一提供的机制。臭名昭着的是DirectByteBuffer
,它分配本机(堆外)内存并且不提供释放它的公共方法。
答案 1 :(得分:1)
来自Bruce Eckel的“ Thinking in Java ”一书:
似乎finalize()已经到位,因为你可能会做某事 通过使用Java中正常机制以外的机制分配内存来 。这个可以 主要通过本机方法发生,这是一种从Java调用非Java代码的方法。 C和C ++是目前唯一支持的语言 本机方法,但由于它们可以调用其他语言的子程序,因此可以有效 叫什么。在非Java代码中,可能会调用C的malloc()函数系列 分配存储,除非你调用free(),否则不会释放该存储,从而导致 内存泄漏。当然,free()是一个C和C ++函数,所以你需要在本机中调用它 你的finalize()中的方法。
阅读本文后,您可能会认为不会使用 最终确定()。