gpt4 book ai didi

java - 未关闭的流是否会导致 java 中的内存泄漏?

转载 作者:搜寻专家 更新时间:2023-10-30 19:49:30 25 4
gpt4 key购买 nike

我相信打开的流会导致 java 中的内存泄漏(至少 java 1.6 和更早的版本确实有这个问题)。

但是,在搜索时(甚至在这里),我发现有些人同意这一点,而另一些人则不同意。所以,如果我写这个程序:

import java.io.*;
public class CreatingMemoryLeak {

public static void main(String args[])
{
String s = "xxxxxxx";
InputStream in = new ByteArrayInputStream(ss.getBytes());
BufferedInputStream bf = new BufferedInputStream(in);

try {
while(bf.read()>0)
{
System.out.println("got it");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Here is a input stream " + s +" causing a memory leak");

}
}

如果我不显式关闭bf 流,是否会导致内存泄漏?

最佳答案

对于 Java,准确使用术语“内存泄漏”很重要。

在 Java 中,内存泄漏发生在您的代码永久持有引用时,因此某些对象永远不会被垃圾回收。

从这个意义上讲,无法关闭流不是内存泄漏。具有本地资源的流具有终结器; GC 最终将关闭它们。除非您持有对未关闭流的引用,否则它不是泄漏。

但是,除了内存泄漏之外,还有其他类型的泄漏。大多数操作系统都限制打开文件的数量。如果您未能关闭流,GC 可能需要很长时间才能为您关闭它们;最终结果可能是您用完了系统文件描述符,您的代码无法再打开一个文件。有些人会称其为泄漏,但称其为内存泄漏并不准确。

关于java - 未关闭的流是否会导致 java 中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22889075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com