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

Kev*_*lan 8 java garbage-collection

我试图检测我的一些Java代码以确保对象被正确地进行垃圾收集,并且我发现令人惊讶的是它并没有像我预期的那样经常被调用.

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

令人担忧的情况是我有一个处理请求的线程,并且在请求中创建了数千个临时对象.有时,此线程写入的套接字意外关闭,线程遇到异常并死亡.

当线程死亡时,似乎不会在这些对象上调用.finalize().这是不相信我的仪器的原因吗?

Cli*_*int 2

不。不能保证它会被调用。然而,它通常被称为。可能是您没有正确释放对象,或者垃圾收集器尚未运行,或者终结器线程正在等待运行的好时机。

您可以在语言规范的类实例的终结部分中阅读相关内容。