gpt4 book ai didi

java - Java中的内存泄漏

转载 作者:行者123 更新时间:2023-12-01 18:33:07 26 4
gpt4 key购买 nike

此代码应该打开一个文本文件,跳过第一行,将其余行复制到临时变量,清除文件,然后将临时变量重写到文件中。

尽管我正在清除并关闭所有对象,但我怀疑这段代码正在产生内存泄漏。我在这里错过了什么吗?

这段代码每秒被调用超过 30 次。

            Scanner scanner_live = new Scanner(file_live);
ArrayList<String> coll = new ArrayList<String>();
scanner_live.nextLine();
while (scanner_live.hasNextLine())
{
String line = scanner_live.nextLine();
coll.add(line);}
scanner_live.close();

PrintWriter writer_del = new PrintWriter(file_live);
writer_del.print("");
writer_del.close();

for (String line : coll) {
FileWriter writer = new FileWriter(file_live.getAbsoluteFile(),true);
BufferedWriter bufferedWriter = new BufferedWriter(writer);
bufferedWriter.append(line);
bufferedWriter.newLine();
bufferedWriter.close();
writer.close();
}
coll.clear();

最佳答案

我建议您避免存储所有行。相反,您可以在读取数据时复制数据。您实际上不需要解析第一行之后的每一行,您只需要复制其余的数据。

try(BufferedReader in = new BufferedReader(new FileReader(file_live);
BufferedWriter out = new BufferedWriter(new FileWriter(file_live+".tmp"))) {
// skip the first line
in.readLine();
char[] buffer = new char[8*1024];
for(int len; (len = in.read(buffer)) > 0;)
out.write(buffer, 0, len);
}
new File(file_live).delete();
new File(file_live+".tmp").renameTo(new File(file_live));

顺便说一句:这种方式一次消耗一行非常昂贵,尤其是在文件很大的情况下。如果可以的话,我建议根本不要重写该文件,而是单独记录您正在执行的行。

关于java - Java中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23245966/

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