gpt4 book ai didi

java - bufferedwriter close() 和 flush() 方法的内存效应是什么?

转载 作者:行者123 更新时间:2023-11-29 08:10:29 27 4
gpt4 key购买 nike

我在这里很困惑。我正在准备 SCJP,我写了一个小的递归程序来检查 BufferedWriter 内存分配在 flush() 和 close() 方法之前|之后。请看下面的代码块,我刚刚将我的桌面文件写入了一个文本文件。

import java.io.*;

public class Myexception{

private static String lvl = "";
static BufferedWriter bw;
private static File source = new File("C:\\Users\\"+System.getProperty("user.name")+"\\Desktop\\New folder\\myTest.txt");

public static void main(String[] args) throws IOException {

Runtime rt = Runtime.getRuntime();

System.out.println("Free memory before recursive: " + rt.freeMemory());

bw = new BufferedWriter(new FileWriter(source));

checkFiles(new File("C:\\Users\\"+System.getProperty("user.name")+"\\Desktop"), 0);

System.out.println("Memory after recursive: " + rt.freeMemory());

bw.flush();
bw.close();
lvl = null;

System.out.println("Memory after clean up: " + rt.freeMemory());
}
static void checkFiles(File file, int level) throws IOException{

if(!file.exists()){

System.out.println("File doesnt exist: " + file.getName() + file.getPath());
return;
}

for(String s:file.list()){

if(new File(file.getPath() + "\\" + s).isDirectory()){

bw.newLine();
bw.write(lvl + "Directory: " + s);

lvl += " ";

checkFiles(new File(file.getPath() + "\\" + s), level+1);

}else{

bw.newLine();
bw.write(lvl + "File: " + s);

}
}
}
}

输出很好,但我不明白,flush() 和 close() 之前的可用内存与 flush() 和 close() 之后的相同。请看我的输出:

Free memory before recursive: 126150232
Memory after recursive: 104461304
Memory after clean up: 104461304

我检查了现有的主题,但找不到确切的解释。我原以为在 bw.close() 之后会有更多可用内存。

谢谢

最佳答案

关闭和刷新流与“清理内存”无关,它们确保 BufferedStream 中的数据被刷新到流指向的任何位置,例如磁盘或网络套接字通常。阅读 JavaDoc,它并不暗示这与垃圾收集有任何关系或影响垃圾收集。在将钱浪费在毫无值(value)的认证上之前,您需要回去学习。

关于java - bufferedwriter close() 和 flush() 方法的内存效应是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8386091/

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