Java:参考资料和GC

时间:2016-05-26 20:49:15

标签: java bufferedreader

我是Java编程的新手,我不知道如何理解引用和垃圾收集器的工作方式,但我需要一些建议。

如果(例如),我需要从文件中读取,并且我使用循环来遍历每个文件并从中读取文本,我应该避免做类似的事情:

(br是BufferedReader的一个实例)

br = new BufferedReader(new FileReader("filePath"));

所以基本上,每次循环时, br 都会引用BufferedReader的新对象。这是错误的做法吗?如果是,我该怎么做才能让它更有效地工作?

提前感谢您提供的任何帮助。

完整代码:

  public int kerko(String folderName, String wantedWord) throws IOException{
   File file = new File(folderName);

   int count = 0;
   if(file.isDirectory()){
       File[] files = file.listFiles();
       for(File f: files){
           if(f.isFile() && f.getName().endsWith(".txt")){
               br = new BufferedReader(new FileReader(f.getAbsolutePath()));
               String line = br.readLine();
               while(line != null){
                   if(line.toLowerCase().contains(wantedWord)){
                        count++;
                   }

                   line = br.readLine();
               }   
               br.close();
           }
           count += kerko(f.getAbsolutePath(), wantedWord);
       }  
   }
   return count;
}

2 个答案:

答案 0 :(得分:1)

以这种方式实例化BufferedReader和FileReader是可以的。

离开{ }块后,这些对象将无法访问,之后GC将收集它们。

答案 1 :(得分:1)

将多个对象一个接一个地分配给同一个变量是绝对正确的。垃圾收集器知道哪些对象不再被引用。

我对垃圾收集的一般建议:除非你做一些非常先进的东西,否则不要考虑它。这就是垃圾收集器的用途。