2017-04-06 13 views
-1

このファイルでOutOfMemoryエラーが発生し続けると、その理由がわかりません。メモリ不足エラーが発生する理由

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 

public class Sgrep { 

    private String name; 
    public String field2; 
    public String go; 
    File File; 
    public String end; 

    Sgrep(String File0, String first) { 
     go = File0; 
     File = new File(File0); 
     name = first; 
    } 

    public String getFilename() { 
     return go; 
    } 

    public String search() { 
     try { 
      if (name == null) { 
       System.out.println("You cannot give a null string."); 
      } 

      BufferedReader yo = new BufferedReader(new FileReader(File)); 

      StringBuffer bruh = new StringBuffer(); 
      String line = null; 
      while ((line = yo.readLine()) != null) { 
       while (line.indexOf(name) > 0) { 
        bruh.append(line); // here is the first error 
       } 

       yo.close(); 
       end = bruh.toString(); 
      } 
     } catch (FileNotFoundException e) { 
      return name + "There is a FileNotFoundExcpetion error. This could happen for various reasons, such as the file not being there, or else being read protected from you, or for example being a directory rather than a file."; 
     } catch (Exception e) { 
      return "You have an io exeption."; 
     } 
     return end; 
    } 
} 

この

public class TesterClass{ 
    public static void main(String[] args){ 
    if(args.length != 2){ 

    System.out.println("Usage: java Sgrep <string> <filename>"); 
    return; 

    } 
    Sgrep task = new Sgrep(args[0],args[1]); 
    System.out.println(task.getFilename()); 
    System.out.println(task.search()); // here is the error 

    } 
} 

に私は2番目のエラーが原因で最初のプログラムであると仮定します。エラーは

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Unknown Source) 
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source) 
    at java.lang.AbstractStringBuilder.append(Unknown Source) 
    at java.lang.StringBuffer.append(Unknown Source) 
    at Sgrep.search(Sgrep.java:35) 
    at TesterClass.main(TesterClass.java:12) 

だと誰にも分かりますか?

+2

[java.lang.OutOfMemoryError:Java heap space]の重複している可能性があります(http://stackoverflow.com/questions/1596009/java-lang-outofmemoryerror-java-heapspace) – Michael

答えて

6

あなたがメモリ不足になるまでこのループは(条件がtrueであると仮定して)何度も何度も自分のStringBufferに同じStringを追加します。順番に

if (line.indexOf(name) > 0) 
{ 
    bruh.append(line); 
} 

while (line.indexOf(name) > 0) 
{ 
    bruh.append(line); // here is the first error 
} 

変更をそれを一度加えるだけです。

関連する問題