Каковы эффекты памяти методов bufferedwriter close () и flush ()? - PullRequest
1 голос
/ 05 декабря 2011

Я совершенно запутался здесь. Я готовлюсь к 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 ().

Спасибо

Ответы [ 2 ]

4 голосов
/ 05 декабря 2011

закрытие и очистка потоков не имеет ничего общего с «очисткой памяти», они гарантируют, что данные в BufferedStream сбрасываются в то, на что указывает поток, например, на диск или сетевой сокет.Прочитайте JavaDoc, это никогда не означает, что это как-то связано или как-то влияет на сборку мусора.Вам нужно вернуться к учебе, прежде чем тратить деньги на бесполезную сертификацию.

1 голос
/ 05 декабря 2011

Память очищается только после запуска сборщика мусора.Пока что вы не увидите никаких изменений в потреблении памяти.

...