我正在将一些C++代码移植到Java语言,这些代码使用了一个非常常见的C++技巧,即在堆栈上分配一个具有一些内部状态信息(这里是一个UDP套接字)的对象(它碰巧实现了一个UDP连接)。在作用域中,该对象用于做各种事情(发送和接收UDP消息)。好的是,当control离开这个作用域时,对象的析构函数将会运行,这会自动释放对象的内部资源(在这种情况下,我确保套接字关闭,这样我就可以在程序的其他部分重用它的地址和端口号)。
在试图弄清楚如何做到这一点时,我了解到Java没有析构函数,"finalize“不会做我想要的事情,等等。
当然,在Java中也有一些类似的聪明技术可以完成同样的事情?我意识到我可以添加一个"close()“方法,并尝试确保它总是在适当的时间被调用,而且我进一步意识到,这在Java语言中可能比在C++中更容易、更可靠。但我真的必须走那条路吗?
发布于 2011-07-09 02:18:50
我相信Java7支持Automatic Resource Block Management,这可能就是你想要的。
发布于 2011-07-09 02:19:42
在您的代码中有一个finally{}块,用于关闭连接并使其为空。这将使其符合垃圾收集的条件。这就是你所能做的。
发布于 2011-07-09 02:23:03
Java将自动清理没有引用的所有内容,以及所谓的“岛”,这是通过自动垃圾收集完成的。您可以随时建议JVM进行收集,但不能保证它会遵守。唯一的保证是,在JVM耗尽内存之前,它会尝试清理所有可以清理的东西。
https://stackoverflow.com/questions/6628611
复制相似问题