A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张志明 中级黑马   /  2014-2-7 10:24  /  1077 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. List<UserAccount> list = new ArrayList<UserAccount>();
  2. UserAccount ua;

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

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

复制代码




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


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

这种应该怎么来处理呢?

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

3 个回复

正序浏览
本帖最后由 Amorvos 于 2014-2-18 14:18 编辑

你不要认为说Java有垃圾回收,程序员就不需要关心内存释放问题,JVM的垃圾回收机制会自动回收无用对象所占用的内存空间。但是这并不是说Java不存在内存泄露,Java的内存泄露更隐蔽、更不容易觉察到,有很多人说内存可以搞大一点,如果这样的话问题不是被解决而是被掩盖,楼主可以看一些关于Java内存回收方面的文章补充一下。
回复 使用道具 举报
Java虽然存在内存回收机制,但是并不是说你不需要自己手动释放资源,我把你的循环代码改了一下,你看看还报错吗
  1. for (int i = 0; i < 200000; i++) {
  2.                         ua = new UserAccount();
  3.                         ua.setUname("a" + i);
  4.                         ua.setUpass("a");
  5.                         ua.setUgroup("aa");

  6.                         list.add(ua);
  7.                        
  8.                         ua = null;
  9.                 }
复制代码

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
设置JVM的内存,搞大点
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马