我运行了这些代码,并且遇到了一些问题,这有点奇怪。如果Java字符串是不可变的,并且StringBuilder是可变的,他们为什么会浪费我的代码中相同数量的内存?
使用字符串:
while(true)
{
String s = String.valueOf(System.currentTimeMillis());
System.out.println(s);
Thread.sleep(10);
}
使用StringBuilder的:
StringBuilder s = null;
while(true)
{
s = new StringBuilder();
s.append(System.currentTimeInMillis());
System.out.println(s);
Thread.sleep(10);
}
在他们被困在12540ķ浪费内存两种情况。在Windows XP SP2上运行此测试。
他们为什么浪费相同数量的内存? 为什么不可变的字符串停止浪费内存? 题外话:如何将StringBuilder
转换为以特定字符集编码的字节数组?
没有100%你是问。上述两者都不会导致任何“浪费”或泄漏的记忆。 12540k可能只是JVM使用的基本内存或还没有被清理的瞬态内存。 – 2010-10-19 11:04:56
为什么不可变类会浪费内存? (而且可变吗?) – Ishtar 2010-10-19 11:08:16
我读过常见的字符串,垃圾回收器从来没有收集过,是否是假的? – fredcrs 2010-10-19 11:12:04