2015-05-11 67 views
0

我已經使用FileInputStream在我的web應用程序中讀取.jks文件。不幸的是,我忘記關閉代碼中的流,並將其移至生產環境。 FileInputStream不是一個靜態流,而是一個局部變量。如果FileInputStream未關閉,應用程序是否會崩潰?

我將有一個很好的機會在一個月或兩個月內解決這個問題。

同時,我的應用程序會因爲這個錯誤而崩潰。我是否需要儘快移動修復程序,或者可以等待兩個月。

請告訴我。

+0

你在初始化時只打開一次這個流,還是反覆打開它? – chrylis

回答

0

保持文件打開超過所需的時間可能至少有以下不利影響:

  1. 資源泄漏,所以你用完文件句柄。
  2. 將文件鎖定到需要使用它的下一個進程。

立即修復。

+0

這無疑是一個錯誤,但是如果他在啓動時只是一次讀取密鑰存儲並且不再觸及它,那麼可能不值得處理官僚組織中的非週期部署。 – chrylis

+0

@chrylis如果他的文件句柄已用完,或者保留一個客戶主文件整個下午都會被鎖定,那麼將會如此。這裏沒有足夠的信息來決定。 – EJP

+0

他*做*說「.jks文件」。 – chrylis

0

最有可能沒有。只要FileInputStream對象可由Java垃圾收集器回收。 FileInputStreamFileOutputStream以及許多其他圍繞系統資源(如文件句柄)的對象,使用finalize方法在垃圾收集處執行清理。因爲GC不是確定性的,並且在完成使用後文件句柄可能會很長時間地返回到操作系統,所以不是最好的解決方案。

如果使用文件鎖定並且您試圖快速重新打開相同文件,或者阻止GC收集流對象,它將只會真正崩潰。

+0

或者,如果GC從不運行... – EJP

+0

@EJP或者說,但我不認爲這將是一個有關用完文件句柄的問題。在耗盡文件句柄之前,您會耗盡內存。除非操作系統策略限制每個進程的文件句柄數量。 –

相關問題