我已经使用FileInputStream在我的web应用程序中读取.jks文件。不幸的是,我忘记关闭代码中的流,并将其移至生产环境。 FileInputStream不是一个静态流,而是一个局部变量。如果FileInputStream未关闭,应用程序是否会崩溃?
我将有一个很好的机会在一个月或两个月内解决这个问题。
同时,我的应用程序会因为这个错误而崩溃。我是否需要尽快移动修复程序,或者可以等待两个月。
请告诉我。
我已经使用FileInputStream在我的web应用程序中读取.jks文件。不幸的是,我忘记关闭代码中的流,并将其移至生产环境。 FileInputStream不是一个静态流,而是一个局部变量。如果FileInputStream未关闭,应用程序是否会崩溃?
我将有一个很好的机会在一个月或两个月内解决这个问题。
同时,我的应用程序会因为这个错误而崩溃。我是否需要尽快移动修复程序,或者可以等待两个月。
请告诉我。
最有可能没有。只要FileInputStream
对象可由Java垃圾收集器回收。 FileInputStream
和FileOutputStream
以及许多其他围绕系统资源(如文件句柄)的对象,使用finalize方法在垃圾收集处执行清理。因为GC不是确定性的,并且在完成使用后文件句柄可能会很长时间地返回到操作系统,所以不是最好的解决方案。
如果使用文件锁定并且您试图快速重新打开相同文件,或者阻止GC收集流对象,它将只会真正崩溃。
或者,如果GC从不运行... – EJP
@EJP或者说,但我不认为这将是一个有关用完文件句柄的问题。在耗尽文件句柄之前,您会耗尽内存。除非操作系统策略限制每个进程的文件句柄数量。 –
你在初始化时只打开一次这个流,还是反复打开它? – chrylis