java - 你能指望 .finalize() 被调用吗?

标签 java garbage-collection

我试图检测我的一些 Java 代码以确保对象被正确地垃圾收集,但我惊讶地发现它并没有像我预期的那样频繁地被调用。

我现在想知道这是因为检测错误还是我需要解决的实际内存泄漏。 VisualVM 分析器似乎表明是前者。

问题是我有一个处理请求的线程,并且在请求中创建了数千个临时对象。有时,这个线程写入的套接字意外关闭,线程遇到异常而死。

当 Thread 结束时,似乎不会对这些对象调用 .finalize()。这是不信任我的仪器的原因吗?

最佳答案

Finalize() 不是解决方案。如果有的话,你不知道什么时候会调用终结器。如果您的问题是异常,请使用 try/catch/finally block 并关闭/清除您要在 finally block 中关闭的所有内容。这保证了在两种情况下都会清除所有内容:逻辑正常终止或抛出异常。

关于java - 你能指望 .finalize() 被调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7879382/

相关文章:

java - 在 Primefaces 中拉伸(stretch)列表

java - 在 Spring 中覆盖库版本

java - Android 按钮调用 www 地址

java - Mapstruct:结果类型 com.integrator.license.License 中存在未知属性 "updateDate"。您的意思是 "updatedDate"吗?

android - 是否可以在 onPostExecute() 中将对 AsyncTask 的引用设置为 null?

c# - 可以在后台线程中运行 GC.Collect 吗?

java - 迭代器可以防止其 LinkedList 被垃圾收集吗?

javascript - Node JS : Named callback functions and Garbage collection

java - 在运行时停止 Akka actor

c# - 使用 mono 的 marksweep-par 垃圾收集