2012-06-05 65 views
1

Java應用程序可能使用IO流,套接字或數據庫連接,這些連接在不再需要時應該關閉。Java應用程序在終止時使用的資源是否已釋放?

但是,應用程序可能會終止(例如通過終止進程)。在這種情況下,所有使用的資源是否會被釋放?誰會釋放他們:操作系統還是JRE?

+0

我認爲他們會被釋放用於訪問資源的庫,以及是否不會發生n,然後是JRE。 – Hassan

+1

這是一個非常廣泛的問題。當進程終止時,JVM初始化的任何東西都將被釋放,但是這並不能保證連接的另一端(例如)將釋放它們的資源。 –

回答

2

如果您的軟件不照顧資源管理不當,會發生以下情況:

  • 在運行時: JVM將你的程序的持續時間內嘗試,如果他們」關閉打開的流再有看似未使用(在垃圾收集週期),
  • 在你的程序的終止點:的JVM應該關閉各類留下你的程序開放的開放流,
  • 在JVM的進程終止點:操作系統將負責釋放JVM尚未正確釋放的任何內容(希望此操作系統有一些嚴重問題...)。

正如瓦肯所提到的,這些都不能確保它們在另一端正確處理。

請注意,第3項重點是一個相當通用的事情:大多數操作系統都會照顧到這一點,它不涉及Java平臺的內部。這是關於OS自己管理其流程和資源的操作系統。

更多信息

參見:

4

JVM將在終止時釋放所有活動資源;然而,這並不能確保另一端也將釋放資源,因此明確關閉資源是每個程序員最感興趣的。

在Java 7中存在明確關閉流的替代方法,稱爲try-resource「語句」,這相當於在try塊之後關閉finally塊中的資源。更多的信息可以在here找到。

相關問題