我一直在阅读关于finalize()的很多新手Java问题,并发现有点令人困惑的是,没有人真正说明finalize()是一种不可靠的清理资源的方法.我看到有人评论说他们用它来清理Connections,这真的很可怕,因为接近Connection的关闭的唯一方法就是最终实现try(catch).
我没有受过CS的教育,但是我已经用Java专业编程近十年了,我从未见过有人在生产系统中实现finalize().这仍然不意味着它没有它的用途,或者我与之合作过的人一直在做正确的事.
所以我的问题是,实现finalize()的用例是什么,无法通过语言中的其他进程或语法更可靠地处理?
请提供具体的方案或您的经验,只是重复Java教科书,或最终确定的用途是不够的,这不是这个问题的意图.
我的Java代码使用多个线程,每个线程运行一个ServerSocket并进入接受状态。这些线程使用java套接字相互通信。使用121个线程都可以正常工作,但是如果我使用256个线程运行相同的代码,则会出现此错误:
java.net.SocketException: No buffer space available (maximum connections reached?): listen failed
at java.net.PlainSocketImpl.socketListen(Native Method)
at java.net.PlainSocketImpl.listen(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
我使用Windows XP SP3,有几个这样的帖子(这里),但是没有人对此问题发表意见。我还安装了Windows补丁程序,以消除对TCP连接的限制,但我没有解决问题。