现在放在ArrayList中的记录很多,有好几百万条,并且同时使用几个ArrayList,请问使用中除了最后clear()之外,还应该注意什么?
多谢各位了
多谢各位了
解决方案 »
- 问个java面向对象调用问题
- 为什么接口中的方法不可以声明为protected或默认?
- JAVA不定参数探秘(想了解内部原理的都可以进来看一下)
- 请教,我需要在java中执行创建数据库表的操作,如何实现
- 能不能让JAVA程序在IE中模拟鼠标的一些动作?
- 关于运用format类来设定数字或字符格式的问题
- 请教一个反射的问题!!在线等,先谢谢了
- 从文本编辑器写的java程序如何放到Jbuilder里?
- 那位大虾给个javaMAIL的例子???(内空)
- 有谁知道UltraEdit8.0b,EditPlus2.10a的注册码.急!急!!急!!!
- 关于jasperreport的问题,谢谢高手解答
- 怎么样把String 转换成Float?
去实现你要做的功能,如果做查询用,可以放在database里面,如果用来显示,也不能一次显示出来,也就不需要完全放在内存里了。
list.clear();
list=null;内存释放了
同时因为是总量数据比较,所以也不可分批读入。
现在就是用ArrayList的clear来清资源,但是我对java虚拟机的内存机制很没底,所以上来向各位请教。
ArrayList lsit=new ArrayList();
list.clear();
list=null;内存释放了
你的说法绝对是错误的,垃圾收集机制是只收集那些没有被任何指针指向的资源,但不保证收集每一个,也无法确实得知收集了哪些,这就好象“测不准”原理:你观察它就会改变它,而不观察却无法知道他的状态
JAVA是靠垃圾收集机来回收内存的。
clear();之后,就靠垃圾收集机来回收内存。
JAVA的编程的方便是以资源消耗为代价的。另外我觉得你可以编一段C的代码来实现回收内存
再集成以解决你的问题
仅仅是我个人观点啊!
非常不可取!违背了设计它的本来意思!
用C就可以堂而皇之的取n 万条记录到内存做个内存数据库,而用java就是违背设计原意???当初是为了一致性选了java,现在看来却是麻烦呢
你不可能把这么多的东西都放到内存中,
只能分段处理。
还是改改思路,不要一下子处理那么多,就是总量数据比较,也不是不能分批处理的。
提取数据库的数据,根据数据生成各种类,都装入List,再转换成一个大docment,再生成XML文件。
之所以一开始这么设计是这样比较符合面向对象的思路也有现成的包可以利用。
但这样数据量到7万条是就out了
然后改设计,不用List了,一批一批的往docment里转,数据量可以到9万
然后分数据,一万一万的读取,数据量到20万也没问题。
我的内存512M你是不是可以说说你取数据要怎样处理,看看能不能通过改变sql语句,能分开处理。