2013-10-02 4 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