现在放在ArrayList中的记录很多,有好几百万条,并且同时使用几个ArrayList,请问使用中除了最后clear()之外,还应该注意什么?
多谢各位了

解决方案 »

  1.   

    为什么把这么大数据量的东西放在内存里面?似乎不太合理,最好用其他方法代替你这种方法
    去实现你要做的功能,如果做查询用,可以放在database里面,如果用来显示,也不能一次显示出来,也就不需要完全放在内存里了。
      

  2.   

    大数据量的运算应限制在数据库自身解决的范围内,java读数据库一般只为显示数据或进行小批量数据运算
      

  3.   

    大数据量的运算应限制在数据库自身解决的范围内,java读数据库一般只为显示数据或进行小批量数据运算
      

  4.   

    ArrayList lsit=new ArrayList();
    list.clear();
    list=null;内存释放了
      

  5.   

    ArrayList里边一般不要放这么大量的数据JAVA虚拟机就很吃内存了,你在把这么多数据放在内存里边处理……建议在数据库中处理
      

  6.   

    现在的运算是比较复杂的,要不然写个存储过程肯定简单啦
    同时因为是总量数据比较,所以也不可分批读入。
    现在就是用ArrayList的clear来清资源,但是我对java虚拟机的内存机制很没底,所以上来向各位请教。
      

  7.   

    newman0708(nch) ( ) 信誉:89  2003-5-8 16:44:08  得分:0 
     
     
      
    ArrayList lsit=new ArrayList();
    list.clear();
    list=null;内存释放了  
     
    你的说法绝对是错误的,垃圾收集机制是只收集那些没有被任何指针指向的资源,但不保证收集每一个,也无法确实得知收集了哪些,这就好象“测不准”原理:你观察它就会改变它,而不观察却无法知道他的状态
      

  8.   

    数据是存放在数据库里面的,只是要拿出来比较to shine333(shine) :请问有什么好的方法释放这些资源呢?
      

  9.   

    我觉得 newman0708(nch) 的方法可以试试
    JAVA是靠垃圾收集机来回收内存的。
    clear();之后,就靠垃圾收集机来回收内存。
    JAVA的编程的方便是以资源消耗为代价的。另外我觉得你可以编一段C的代码来实现回收内存
    再集成以解决你的问题
    仅仅是我个人观点啊!
      

  10.   

    java.lang.Runtime.gc(),强制收集垃圾.但是设计ArryList的本来意思是要减少返回到客户端的数据量.而你却用他来返回上万的记录集合.
    非常不可取!违背了设计它的本来意思!
      

  11.   

    那么应该如何作呢???java操作难道就那么高层?
    用C就可以堂而皇之的取n 万条记录到内存做个内存数据库,而用java就是违背设计原意???当初是为了一致性选了java,现在看来却是麻烦呢
      

  12.   

    主要是解决java.lang.OutOfMemoryError 错误
      

  13.   

    不用几百万,几万就会OutOfMemory了。
    你不可能把这么多的东西都放到内存中,
    只能分段处理。
      

  14.   

    第一次看到这么用ArrayList的关注up
      

  15.   

    看来,要真是这样,你的好好优化你的算法或者是数据库的设计,否则,JAVA虚拟机会被活活的累死
      

  16.   

    我觉得,你不要想添个xx=null,或xx.gc()就能解决问题,除非,你的List里的对象只用一遍。那样也用不着List。
    还是改改思路,不要一下子处理那么多,就是总量数据比较,也不是不能分批处理的。
      

  17.   

    没办法,我再重复一下,我的数据本身就是放在数据库中的,但是不能用太复杂的sql语句来代替,数据库处理速度也不行,所以就读到内存里来。难道jvm那么弱?那台机器2g内存处理几万条记录都不行?以前同事做过类似的同事,只是用的c,可是1G多的内存“数据库”呀
      

  18.   

    我做过这么一个东西
    提取数据库的数据,根据数据生成各种类,都装入List,再转换成一个大docment,再生成XML文件。
    之所以一开始这么设计是这样比较符合面向对象的思路也有现成的包可以利用。
    但这样数据量到7万条是就out了
    然后改设计,不用List了,一批一批的往docment里转,数据量可以到9万
    然后分数据,一万一万的读取,数据量到20万也没问题。
    我的内存512M你是不是可以说说你取数据要怎样处理,看看能不能通过改变sql语句,能分开处理。
      

  19.   

    通过sql语句是不现实的,数据库的反复io操作是个大瓶颈(在对速度要求高的系统中)算了,这类问题我决定丢给弄c的同事解决了,俺绝望了:(
      

  20.   

    If you need to sort, group or do somthing else, to swap the records is very necessary, from memory to disk, or reverse.