为什么String类和StringBuffer测试耗费内存相同呢?

人工智能-张晨光
优质创作者: 前端开发技术领域
领域专家: 后端开发技术领域
2014-05-30 04:04:53
class MemoryTest2
{
public static void main(String[] args)
{
StringBuffer s2=new StringBuffer("abcddafdfadsfad");
System.out.println("当前虚拟机最大可用内存:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"M");
System.out.println("循环前内存:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"M");
int count=0;
while(true)
{
try
{
s2.append(s2);
count++;
}catch(Error o){
System.out.println("循环次数:"+count);
System.out.println("字节数:"+s2.length()/1024/1024+"M");
System.out.println("循环后内存:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"M");
System.out.println("Catch到的错误:"+o);
break;
}

}
}
}

String类修改下代码和这个一样的?为什么呢?
...全文
481 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
teemai 2014-05-31
  • 打赏
  • 举报
回复
楼上说的对的。要大数据量的测试才会发现区别。 另外现在jvm自己也会做一定的优化
咖啡不放糖 2014-05-31
  • 打赏
  • 举报
回复
你做10000次字符串拼接就知道了。不可变序列的string就会有10000个对象。效果很明显
-江沐风- 2014-05-30
  • 打赏
  • 举报
回复
你可以把StringBuilder也加进去; 再说了,一个字符串能说明什么呢
vnvlyp 2014-05-30
  • 打赏
  • 举报
回复
1.maxMemory获取的是虚拟机最大可用内存,并不是当前已经使用的内存 2.StringBuffer相比String不会耗费更少的内存,反而可能会更多,因为StringBuffer类更复杂,而且由于是Buffer,char数组长度可能大于实际内容,StringBuffer的优势是进行多次字符串合并时的效率优势。 顺便说下你又不需要线程安全,用什么StringBuffer,用StringBuilder的话效率会更高

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧