我有一个java程序,它有无限的服务器套接字监听。 如果JVM通过kill pid异常退出,那么在这种情况下,套接字对象会发生什么?套接字会被释放还是会被锁定?
在JVM异常退出的情况下,处理文件描述符/ network-socket / jdbc连接等系统资源清理的最佳方法是什么。
最后我知道终结器,但使用最终化会有一些不确定性和性能下降。
请提供一些想法
答案 0 :(得分:4)
在出现异常退出的情况下,显然JVM无法专门清理已分配的内容。这个责任将落在操作系统本身旁边。
对于套接字,现代操作系统肯定会释放由崩溃进程打开的任何套接字。这同样适用于文件和任何其他内核对象(JDBC连接使用某种套接字实现)。
如果JVM异常终止,则不会运行终结器。
答案 1 :(得分:1)
JVM退出时会释放内存,文件描述符和网络套接字等系统资源。由于网络协议,与网络套接字的连接将需要一段时间才能关闭。
一旦数据库意识到连接的另一端已关闭,就应该释放JDBC连接。保持活动的计时器可以帮助更快地清理连接。数据库将清理打开的事务,并在清理连接时释放锁。