Java 字符串串联OutOfMemoryError
我正在摆弄Java.lang.String,并对它们使用“+”运算符。我很想知道为什么会得到以下输出: 使用下面的代码,我可以进行数千次迭代,并且不会引发内存异常:Java 字符串串联OutOfMemoryError,java,memory-management,memory-leaks,Java,Memory Management,Memory Leaks,我正在摆弄Java.lang.String,并对它们使用“+”运算符。我很想知道为什么会得到以下输出: 使用下面的代码,我可以进行数千次迭代,并且不会引发内存异常: public static void main(String[] args) { String str = "hello"; int count = 1; while (true) { System.out.println(count++);
public static void main(String[] args) {
String str = "hello";
int count = 1;
while (true) {
System.out.println(count++);
str = str + "newString";
}
}
但是,当我将'str'添加到自身中时,我在20-30次迭代之后就得到了OutOfMemoryError异常:
public static void main(String[] args) {
String str = "hello";
int count = 1;
while (true) {
System.out.println(count++);
str = str + "newString" +str;
}
}
我在32位操作系统上使用eclipse,如果您这样做的话,就没有其他参数,如Xms或Xmx
str = str + "newString";
您的字符串在每次迭代中线性增长9个字符
迭代字符串长度
1 5
2 14
3 23
4 32
5 41
6 50
...
30 266
另一方面,如果你这样做
str = str + "newString" + str;
您的字符串以指数形式增长。它在每次迭代中变为两倍长+9个字符
迭代字符串长度
1 5
2 19
3 47
4 103
5 215
6 439
...
30 7516192759
如果您这样做
str = str + "newString";
您的字符串在每次迭代中线性增长9个字符
迭代字符串长度
1 5
2 14
3 23
4 32
5 41
6 50
...
30 266
另一方面,如果你这样做
str = str + "newString" + str;
您的字符串以指数形式增长。它在每次迭代中变为两倍长+9个字符
迭代字符串长度
1 5
2 19
3 47
4 103
5 215
6 439
...
30 7516192759
只是一道数学题:
战俘(2,20)远大于几千人。
字符串的长度为5个字符,在每个循环步骤中都要加倍。经过20步之后,您的字符串(不附加“newString”字符串)长度为5*pow(2,20)。这是一个5 242 880个字符的长度,比第一个循环中的5+9*1000=45000个字符多得多
编辑修改:在第二个循环中,你有5*pow(2,20)+9*sum(pow(2,i),i,0,19)。只是一个数学问题:
战俘(2,20)远大于几千人。
字符串的长度为5个字符,在每个循环步骤中都要加倍。经过20步之后,您的字符串(不附加“newString”字符串)长度为5*pow(2,20)。这是一个5 242 880个字符的长度,比第一个循环中的5+9*1000=45000个字符多得多
编辑按正确顺序执行:在第二个循环中,您有5*pow(2,20)+9*sum(pow(2,i),i,0,19)。正确迭代次数??您将理解多少次?正确迭代次数??您将理解多少次