java - 有没有办法强制执行finalize()方法

标签 java garbage-collection finalize

我有以下与 Java 的 Finalize() 方法和垃圾收集相关的问题。

  1. 有没有办法可以强制执行finalize()方法?
    JDK 弃用以下方法的原因是什么?

    Runtime.runFinalizersOnExit(true);

  2. 除了上面的问题之外,我正在阅读文章 http://javarevisited.blogspot.com/2011/04/garbage-collection-in-java.html 。在此,请参阅第 5 点,作者说 Finalize() 在调用垃圾收集器之前被调用。那么这件事肯定会发生吗?我的意思是在执行垃圾收集器方法之前是否总是调用finalize()方法?

  3. 假设我的堆中有很多垃圾,但垃圾收集器没有执行。那么这难道不是 JVM 的不良行为或者缺陷吗?

  4. 由于没有发生垃圾回收,它如何降低我的应用程序的性能?

最佳答案

finalize 方法 may never actually get called ,因此任何肯定需要运行的关键清理代码都应该放在其他地方。您可能应该自己管理此操作 - 当您完成持有某些资源的对象时,请显式进行清理(例如,实现 close 方法)。

关于java - 有没有办法强制执行finalize()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22373394/

相关文章:

Java - JTextField 填充所有框架

java - Java 的原语是一等公民吗?

c# - 卸载用 Assembly.LoadFrom() 加载的程序集

c# - 长时间运行的 Windows 服务是否存在内存泄漏?或者只是看起来像一个?

java - 当GC可以释放所有连接时,为什么需要finalize

java - 如何从 e4 中的 IWorkbenchPage 获取 Activity 部分?

java.sql.SQLException : No suitable driver found for jdbc:derby:

c# - 为什么在 asp.net MVC Controller 中需要显式 Dispose() 方法?谁能解释它的复杂性? (特定于 asp.net)

java - Java中的finalize()方法什么时候被调用?

java - 为什么我的 Java 对象被复制或 finalize() 被调用两次?