如何使用字符串有效地管理内存?
考虑一段示例代码。
public void testString()
{
int i = 0;
while(i < 100000000)
{
String s ="Hi hello bye" +i;
i++;
}
}
在每次迭代中,都会创建一个新的 String,并且下一次迭代不再需要其值。我尝试打印此 testString() 功能之前和之后消耗的内存。以下是它们的值。
Before invoking testString():
Total Memory: 91684864 (87.4375 MB)
Max Memory: 1360855040 (1297.8125 MB)
Free Memory: 72163552 (68.82052612304688 MB)
After invoking testString():
Total Memory: 424280064 (404.625 MB)
Max Memory: 1360855040 (1297.8125 MB)
Free Memory: 171766816 (163.80960083007812 MB).
我看到大量内存被使用,并且由于当前处理字符串的方式,我担心JVM堆可能会越界。迭代 2 中不再需要为迭代 1 生成的字符串,并且可以释放其存储空间。我认为,这里没有发生这种情况。
我尝试使用StringBuffer和StringBuilder对象,内存使用率似乎有很小的改善。
请帮助我一个更好和最好的方法。