黑马程序员技术交流社区
标题:
内存溢出的问题
[打印本页]
作者:
毕影彬
时间:
2012-10-17 20:21
标题:
内存溢出的问题
本帖最后由 毕影彬 于 2012-10-20 19:01 编辑
测试代码public static void main(String[] args) { List list = new ArrayList() ; long startTime = System.currentTimeMillis(); for(int i = 0 ; i<10000000 ; i++){ list.add(i) ; if(i==100000){ list.clear(); System.gc() ; } } long endTime = System.currentTimeMillis(); System.out.println("End.. : " + endTime + " Cost : " + (endTime - startTime)); }还是溢出
作者:
hello_world!
时间:
2012-10-17 23:45
说明两点,第一、int类型的数据放入ArrayList中,会自动装箱成Integer。第二、一个Integer占用的空间是16byte,16*10000000 =160M早就超过了jvm的虚拟空间。jvm默认的虚拟空间是64M
作者:
qhasilver
时间:
2012-10-17 23:58
public static void main(String[] args) {
List list = new ArrayList() ;
long startTime = System.currentTimeMillis();
for(int i = 0 ; i<10000000 ; i++){
list.add(i);
if(list.size()==100000){
list.clear();
System.out.println("clear"+i);
System.gc() ;
}
}
long endTime = System.currentTimeMillis();
System.out.println("End.. : " + endTime + " Cost : " + (endTime - startTime));
}
复制代码
1.二楼已经把原因说出来了,java虚拟机默认的堆内存大小为64M,而你的清理机制是错误的。无法清理掉list里的元素,我帮你修改了一下。
if(i==100000){ 改成 if(list.size()==100000){
2.System.gc();这个方法写上去没意义,java不保证会运行垃圾回收机制,有点浪费表情。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2