nnyyang 2010-01-08 14: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 12:49
    关注

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

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

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

    王道: 分页是最好的选择

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

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

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

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记