2015-05-11 63 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或者说,但我不认为这将是一个有关用完文件句柄的问题。在耗尽文件句柄之前,您会耗尽内存。除非操作系统策略限制每个进程的文件句柄数量。 –

相关问题