计算不能管计算字符串长度,还要加上String类型的对象结构占用的内存,还有引用所占用的内存.

解决方案 »

  1.   


    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倍以上。再说系统就算要存储引用地址等资源,那也不可能浪费这么多内才啊
      

  2.   

    for( int i = 0 ; i < readString.length() ; i++ )
        {
            //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替代吧