我是个新手。我已经编写了这段代码,它显示那里存在资源泄漏
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
这是什么意思?抱歉,我太天真了。
正在发生的是,您从来没有关闭您的扫描仪,这样资源可能会被“泄漏”。这意味着JVM正在幕后分配、释放和管理对象(资源),并且需要知道您的扫描器对象是否仍在使用,或者它是否可以释放内存(执行“垃圾收集”)用于其他东西。当资源关闭时,您正在让垃圾回收器知道可以清理那些资源。这就像打开了一大堆酸奶容器,然后把它们扔在房子周围。你还在吃还是可以放回冰箱里?
对此有几个解决方案。一种是在扫描器上显式调用close()
方法,如其他答案所述。但是还有另一种更干净的方法来管理资源。
在《Java 7》中,引入了一个“使用资源尝试”来自动关闭这样的资源,因为程序员“忘记”关闭他们的资源是很常见的事情。这使得JVM更容易为您管理资源。
try(Scanner scan = new Scanner(System.in))
{
int i = scan.nextInt();
}
catch(Exception e) {}
finally {}
使用try with resources的另一个好处是,它提醒程序员考虑可能发生的所有例外情况。例如,如果用户在命令行中输入一个字符而不是int
会发生什么?如果您的处理过程中发生异常,并且您忘记关闭执行分支上的扫描器,该怎么办?try-with-resources可以简化这一点,并使代码更加简洁和可读性(如果使用得当的话)。
发生这种情况是因为您没有关闭扫描仪。Java垃圾收集器只管理内存,所以对于其他资源,您必须显式关闭它们。使用
scan.close();
希望有帮助!!
在中,我收到了一个警告,我不明白这一点。 这是理解问题还是java/eclipse问题?
我正在读取一个文件并将其内容存储在字符串中。代码给了我一个警告:Resource leak:。我如何解决它?
我在IOUtils上使用了一个很好的函数,名为“closequity”,它可以关闭流,不管流中有什么。 例如: 不知何故,当我在最后一个块中调用它时,它也隐藏了Eclipse上的警告,即“资源泄漏:‘输入’在此位置未关闭”。 这意味着在上述代码中,没有此类警告。 我不明白它是如何隐藏对自身“外部世界”的警告的。 我试图通过复制这个库的代码来检查它(这里的例子),但是当我在新类上使用它时,警告会出现
eclipse“潜在资源泄漏”警告不正确。 没有警告: 警告:潜在资源泄漏:“此位置可能未关闭响应” 为什么第二种方法会引起警告? 谢谢!
我使用一个用不同长度的不同值填充字节数组。我使用方法。由于此方法继承自,因此可能会引发IOException。在中有一个方法不会引发IOException,因此我扩展了并覆盖方法,该方法现在也不会引发IOException: 对于扩展类,我在eclipse 4.5.1中得到了资源泄漏的警告,因为我没有关闭代码中的流。的情况并非如此。我的扩展类有什么问题,或者我需要添加什么来删除警告?我知道我可以将
Eclipse Java警告:资源泄漏:“Unassigned Closeable Value”从不关闭 漏在哪里?