2010-09-28 44 views
3

我有一個java程序,它有一個無限的服務器套接字監聽。 如果JVM通過kill pid異常退出,這種情況下套接字對象會發生什麼系統資源?套接字會被釋放還是會被鎖定?JVM異常退出 - 清理系統資源

如果JVM退出異常,處理清理系統資源(如文件描述符/ network-socket/jdbc連接)的最佳方法是什麼?

我終於知道終結器了,但是使用終結方法存在一些不確定性和性能下降。

請提供一些思路

回答

4

在異常退出的情況下,顯然JVM不能做任何具體的清理任何分配給它的。這個責任將落在操作系統本身旁邊。

對於套接字,現代操作系統肯定會釋放任何由於崩潰的進程打開的套接字。這同樣適用於文件和任何其他內核對象(JDBC連接通過某種套接字來實現)。

如果JVM異常終止,終結器將不會運行。

+0

感應JVM崩潰的任何可能性,並控制代碼,其中我可以清理打開的套接字?當然,還有終結者選項。 – user309281 2010-09-28 05:14:51

+0

也讓我知道你的操作系統是什麼意思,它會在處理崩潰時自動關閉系統資源?我在HP-UX 11.2中運行我的應用程序。 – user309281 2010-09-28 05:15:56

+1

@ user309281:不,如果JVM崩潰,那麼在崩潰過程中根本無法運行任何進一步的Java代碼。操作系統將在您清理完畢後清理。我預計HP-UX在這方面將會很強大。 – 2010-09-28 05:16:01

1

當JVM退出時,會釋放系統資源,如內存,文件描述符和網絡套接字。由於網絡協議,連接到網絡套接字需要一段時間才能關閉。

一旦數據庫意識到連接的另一端已關閉,應該釋放JDBC連接。保持連接的定時器可以幫助更快地清理連接。數據庫將清理打開的事務,並在清理連接時釋放鎖。