计算不能管计算字符串长度,还要加上String类型的对象结构占用的内存,还有引用所占用的内存.
解决方案 »
- java有支持wildcard search的方法吗?
- struts2中使用session,浏览器禁用了cookie,如何实现URL重写
- 在Linux上不能运行JavaScript,在我自己的机上能夠运行,是不是Linux服务器上Apache少配置了什麽導致???
- Struts2前台页面VO 和hibernate 的问题
- 第一个servlet出错了~~~~~~
- 关于hibernate的疑问
- 谁有java itext的案例啊
- SmartUpload的问题
- Struts框架社区BBS-CS天乙社区V5.0安装版发布
- JBUILDER發布EJB的問題??
- window.open 的问题
- struts2 中namespace的问题
ArrayList<String> lists = new ArrayList<String>();
ArrayList<Character> listc = new ArrayList<Character>();
String readString = new String();
while ((readString = fileReader.readLine()) != null)
{
lists.add(readString);
for( int i = 0 ; i < readString.length() ; i++ )
{
listc.add(readString.charAt(i));
}
}
fileReader.close();循环内我用字符型也试过,消耗内存依然是20倍以上。再说系统就算要存储引用地址等资源,那也不可能浪费这么多内才啊
{
//lists.add(readString.substring(i, i+1));
}
这种代码 你凭什么说理论上只多消耗1倍?
首先使用String 类 对String 的任何操作至少都会新建一个对象出来,应为Java中string是不可改变的
如 String s = new String("s");其实创建了3个对象 1个字符“s”,一个newString("s")也就是对象s指定的内存地址,最少是s自己所占的地址
readString.substring(i,i+1),这是创建了多少个对象?(没看源码,但是最少是多创建了1个吧)
每次一个for循环最少创建1个对象 ,如果你的readString长度在100 那就至少100个对象,也就是没有for循环的100倍。
所以在stirng比较长或者操作过多的时候,用StringBuff替代吧