nnyyang 2010-01-08 06:30
浏览 221
已采纳

java 基础问题。

List list = new ArrayList();
UserAccount ua;

        for(int i = 0 ;i<2000000;i++){
            ua = new UserAccount();
            ua.setUname("a"+i);
            ua.setUpass("a");
            ua.setUgroup("aa");

            list.add(ua);
        }
        System.out.println(list.size());

这个相当与是数据库查出来2000000条记录。我把它封成对像,放到list中。。但。因数据太大。。每次都抛java.lang.OutOfMemoryError: Java heap space

因为每次都 在循环中new了一个对像。。。

这种应该怎么来处理呢?
[b]问题补充:[/b]
其实我就是有那个多条数据得嘛。。而且我只知道这么做。。。有没有好的例子,给我讲一讲,谢谢各位。

  • 写回答

4条回答 默认 最新

  • jsjzhou 2010-01-09 04:49
    关注

    最好用分页查询.原则上,我们没有必要查询400万条数据集记录.如果是大型互联网公司,数据库记录每天的增长是几百万或则上一条.不能一次全部出来.

    原因:如果你的Java 虚拟机运行在32的操作系统上,最大的寻址空间是4G.操作系统最大允许分配一半的空间,那么最大JVM允许访问2G的内存空间.所以2G内存不一定能容纳你的400万条记录.

    目前64位的虚拟机还不稳定

    王道: 分页是最好的选择

    如果数据量的确需要,请使用缓存.

    分页技术:
    如果是hibernate已经提供封装了大部分数据的分页查询.
    如果你用的jdbc或者是iBATIS,你的查看相应数据库的分页技术.一般情况下,在mysql中,用limit关键字实现.在Oracle中,用rownum实现.在ms sql server中,用top关键字.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部