JVM异常退出-清理系统资源

JVM异常退出-清理系统资源,jvm,Jvm,我有一个java程序,它有一个无限监听的服务器套接字。 如果JVM通过kill pid异常退出,那么在这种情况下,系统资源(socket对象)会发生什么变化?插座是释放还是锁定 在JVM异常退出的情况下,处理清理系统资源(如文件描述符/网络套接字/jdbc连接)的最佳方法是什么 最后,我知道终结器,但是使用终结器会有一些不确定性和性能下降 请提供一些想法在异常退出的情况下,显然JVM不能专门做任何事情来清理分配的内容。这个责任将落在操作系统本身的后面 对于套接字,现代操作系统肯定会释放由崩溃进程

我有一个java程序,它有一个无限监听的服务器套接字。 如果JVM通过kill pid异常退出,那么在这种情况下,系统资源(socket对象)会发生什么变化?插座是释放还是锁定

在JVM异常退出的情况下,处理清理系统资源(如文件描述符/网络套接字/jdbc连接)的最佳方法是什么

最后,我知道终结器,但是使用终结器会有一些不确定性和性能下降


请提供一些想法

在异常退出的情况下,显然JVM不能专门做任何事情来清理分配的内容。这个责任将落在操作系统本身的后面

对于套接字,现代操作系统肯定会释放由崩溃进程打开的任何套接字。这同样适用于文件和任何其他内核对象(JDBC连接是通过某种套接字实现的)


如果JVM异常终止,终结器将不会运行。

当JVM退出时,系统资源(如内存、文件描述符和网络套接字)将被释放。由于网络协议的原因,到网络套接字的连接需要一段时间才能关闭


一旦数据库意识到连接的另一端已关闭,就应该释放JDBC连接。保持活动计时器有助于更快地清理连接。数据库将清理打开的事务,并在清理连接时释放锁。

是否有可能检测到JVM崩溃并控制我可以清理打开的套接字的代码?当然,有终结器选项。也让我知道你指的是哪个操作系统,哪个操作系统在进程崩溃时会自动关闭系统资源?我正在HP-UX 11.2中运行我的appln。@user309281:不,如果JVM崩溃,那么根本无法在崩溃过程中运行任何进一步的Java代码。操作系统将在您之后清理。我希望HP-UX在这方面会很强大。任何指向OS文档的关于自动清理锁定系统资源的指针/参考。我的观点是,如果你认为端口是OS的资源……如果一个进程要确保这个资源被锁定,它需要通过与OS的交互来实现这一点…现在,如果端口被锁定,进程在释放锁之前死亡。我的问题是,操作系统是否会定期删除这些死锁,从而释放资源供其他进程使用…@user309281:请查看此问题并回答与您类似的情况: