自动资源释放的 Java 技术? "prompt cleanup" ?



我正在将一些c++代码移植到Java,这些代码使用了相当常见的c++技巧,即在堆栈上分配对象(它碰巧实现了UDP连接),该技巧具有一些内部状态信息(这里是UDP套接字)。在作用域中,对象被用来做各种事情(发送和接收UDP消息)。好处是,当控制离开这个作用域时,对象的析构函数将被运行,这可以自动导致释放对象的内部资源(在这种情况下,我确保套接字被关闭,以便我可以在程序的其他部分重用它的地址和端口号)。

在试图弄清楚如何做到这一点时,我了解到Java没有析构函数,"finalize"不会做我想要的,等等。

在Java中肯定有一些类似的聪明技术来完成同样的事情吧?我意识到我可以添加一个"close()"方法,并尝试确保它总是在适当的时间被调用,我进一步意识到这可能在Java中比在c++中更容易和可靠。但我真的要走这条路吗?

我相信Java 7支持自动资源块管理,这可能是你正在寻找的。

在代码中使用finally{}块来关闭连接并使其无效。这将使其符合垃圾收集的条件。这就是你能做的。

Java将自动清除没有引用的所有内容,以及所谓的"孤岛",这是通过自动垃圾收集完成的。您可以建议JVM在任何时候进行收集,但不能保证它会遵守。唯一可以保证的是,在JVM用完内存之前,它将尝试清理它所能清理的所有内容。

在SO上进行简单的搜索,就会发现与同一主题相关的大量问题和答案。我冒昧地抄了一些比较有趣的,贴在这里。

c++的析构函数在Java中等效吗?

Java有析构函数吗?

为什么Java没有像c++那样的析构函数?

在Java中清理对象的最好方法是什么?

如何在Java中编写解构器?

我是一个行走的搜索引擎。

最新更新