【问题标题】:Is there a destructor in java to counter the constructor? [duplicate]java中是否有析构函数来对抗构造函数? [复制]
【发布时间】:2015-09-10 06:26:12
【问题描述】:

由于 Java 编程具有在实例化新对象时运行代码的构造函数,所以我很好奇是否有什么可以解决的问题。创建新对象会占用内存,那么Java中有没有一种机制可以擦除或覆盖未使用的内存?

如果Java中有析构函数,那么它与其他编程语言(如C)中的内存管理系统有何不同?

【问题讨论】:

  • 不.. 但是有一个叫做Garbage Collector 的东西会自动处理...
  • 有“finalize”,但实际上并不是析构函数。这是一篇关于 Java 清理的文章:javaworld.com/article/2076697/core-java/…
  • 您可以使用 java.lang.ref.Reference 以某种方式操纵对象何时可能被 GCed。
  • 没有,但还有其他机制,如 finalize() mehtod 和垃圾收集器。你说的反构造器是什么意思?

标签: java constructor


【解决方案1】:

您可以覆盖java.lang.Object中定义的finalize方法

无法保证您的finalize 方法在您的程序运行期间被调用过!看看JavaDoc!因此,在大多数情况下,重写“finalize”并不是一个好主意。

如果你需要清理资源,你可以使用'try/finally'语句,或者如果你使用一些框架,比如'Spring',一些框架提供的钩子(例如@PreDestroy

顺便说一句:在java中你不能主动擦除或覆盖内存区域,这是由垃圾收集器完成的。

【讨论】:

    【解决方案2】:

    在java中用于擦除与代码中没有任何引用(称为垃圾)的对象一起使用的内存,有一种称为垃圾调用器的机制。 JVM 会在必要时调用它,但您可以通过 System.gc() 调用它。

    作为构造函数的计数器(这是一些在对象实例化时执行的代码),有一个 finalize 方法在对象进行垃圾收集时执行。

    您可以覆盖它(在Object 类中定义)。

    【讨论】:

      猜你喜欢
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 2013-04-17
      • 2014-08-02
      • 2013-10-13
      • 2011-09-28
      • 1970-01-01
      相关资源
      最近更新 更多