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

标签 java memory flush bufferedwriter

我在这里很困惑。我正在准备 SCJP,我编写了一个小递归来检查 BufferedWriter 内存分配 before|afterlush() 和 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/

相关文章:

java - JFrame 不显示图片

java - 最佳实践——构造函数和设置函数

java - 如何在java代码中使用.dll文件?

java - 如何将连接查询映射到 JPA 中的非实体类?

c++ - 内存泄漏的长期后果是什么?

c++ - 将结构写入文件

Javascript:将类/对象引用设置为 NULL,内存中的子对象/类会发生什么?

django - 明确清除 django memcached flush/cache() 或删除特定的 per-view-cache 键

c - C 中不关闭冲水管

java - 为什么java FileOutputStream的write()或flush()不能使NFS客户端真正向NFS服务器发送数据?