2013-10-02 97 views
0

我嘗試操縱大字符串流氓,並得到不斷出現以下錯誤:java.lang.OutOfMemoryError:與流氓代碼Java堆空間

java.lang.OutOfMemoryError: Java heap space(internal error).

我在eclipse.ini文件改變以下參數:

-XX:MaxPermSize=1024m 
-Xms256m 
-Xmx1024m 

但這並沒有改變。

的代碼看起來是這樣的:

public str removeBB(str file){ 
while(contains(file, "aB")){ 
    index1 = findFirst(file, "aB"); 
    index2 = (findFirst(file, "Ba") + 2); 

    subString1 = substring(file, 0, index1); 
    subString2 = substring(file, index2); 

    file = subString1 + subString2; 
} 

return file; 
} 

我怎樣才能防止這種錯誤?是否有方法來編寫代碼,以便更有效地利用內存?

+0

嘿,你沒有改變'BB'的發生,這使得while循環無限循環。 – Raptor

回答

1

我沒有立即看到爲什麼這段代碼是抖動內存,也許是因爲它在您的示例字符串中發現index2小於index1?

但無論如何,我會寫像使用正則表達式和參觀,而不是使用的indexOf:

visit (file) { case /aB.*Ba/ => "" }

此外,字符串的切片有一個更好的語法來使用,而不是子:

rascal>"asdlhfasldfhslf"[5..8] str: "fas"

+0

也許這樣你也會鬆動內存垃圾的行爲。你可以發表一個內存天高的例子嗎? – jurgenv

相關問題