Memory management java.lang.OutOfMemoryError:带有流氓代码的java堆空间

Memory management java.lang.OutOfMemoryError:带有流氓代码的java堆空间,memory-management,rascal,Memory Management,Rascal,我尝试在rascal中操纵大字符串,并不断出现以下错误: java.lang.OutOfMemoryError:java堆空间(内部错误) 我在eclipse.ini文件中更改了以下参数: -XX:MaxPermSize=1024m -Xms256m -Xmx1024m 但这并没有改变什么 代码如下所示: public str removeBB(str file){ while(contains(file, "aB")){ index1 = findFirst(file, "aB")

我尝试在rascal中操纵大字符串,并不断出现以下错误:

java.lang.OutOfMemoryError:java堆空间(内部错误)

我在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;
}

如何防止此错误?有没有办法编写这样的代码以提高内存效率?

我现在不明白为什么这段代码会占用内存,可能是因为它在示例字符串中发现index2小于index1

但无论如何,我会编写一些类似于使用正则表达式和visit的内容,而不是使用indexOf:


访问(文件){
案例/aB.*Ba/=>“”
}

此外,字符串切片有更好的语法可供使用,而不是子字符串:


流氓>“asdlhfasldfhslf”[5..8]
str:“fas”

嘿,你没有改变
BB
的出现,这使得while循环无限循环。也许这样你也会失去内存破坏行为。你能不能贴一个例子字符串,上面的内存非常高?