我已經使用FileInputStream在我的web應用程序中讀取.jks文件。不幸的是,我忘記關閉代碼中的流,並將其移至生產環境。 FileInputStream不是一個靜態流,而是一個局部變量。如果FileInputStream未關閉,應用程序是否會崩潰?
我將有一個很好的機會在一個月或兩個月內解決這個問題。
同時,我的應用程序會因爲這個錯誤而崩潰。我是否需要儘快移動修復程序,或者可以等待兩個月。
請告訴我。
我已經使用FileInputStream在我的web應用程序中讀取.jks文件。不幸的是,我忘記關閉代碼中的流,並將其移至生產環境。 FileInputStream不是一個靜態流,而是一個局部變量。如果FileInputStream未關閉,應用程序是否會崩潰?
我將有一個很好的機會在一個月或兩個月內解決這個問題。
同時,我的應用程序會因爲這個錯誤而崩潰。我是否需要儘快移動修復程序,或者可以等待兩個月。
請告訴我。
最有可能沒有。只要FileInputStream
對象可由Java垃圾收集器回收。 FileInputStream
和FileOutputStream
以及許多其他圍繞系統資源(如文件句柄)的對象,使用finalize方法在垃圾收集處執行清理。因爲GC不是確定性的,並且在完成使用後文件句柄可能會很長時間地返回到操作系統,所以不是最好的解決方案。
如果使用文件鎖定並且您試圖快速重新打開相同文件,或者阻止GC收集流對象,它將只會真正崩潰。
或者,如果GC從不運行... – EJP
@EJP或者說,但我不認爲這將是一個有關用完文件句柄的問題。在耗盡文件句柄之前,您會耗盡內存。除非操作系統策略限制每個進程的文件句柄數量。 –
你在初始化時只打開一次這個流,還是反覆打開它? – chrylis