当前位置: 代码迷 >> J2EE >> ObjectOutputStream 写下复杂java对象 100万条数据
  详细解决方案

ObjectOutputStream 写下复杂java对象 100万条数据

热度:615   发布时间:2016-04-17 23:54:06.0
ObjectOutputStream 写入复杂java对象 100万条数据
public static void main(String argsp[]) {
FileOutputStream outStream;
List<school> ls = new ArrayList<school>();
school sch = null;
classes cls = null;
for (int i = 0; i < 10000000; i++) {
sch = new school();
cls = new classes();

cls.setLb("hahahahahahahahahaha" + i);
cls.setName("classclassclassclass" + i);
cls.setPer(i);
cls.setTea("tear_tear_tear_tear_" + i);

sch.setAddress("addressaddressaddres" + i);
sch.setCls(i);
sch.setTea(i);
sch.setName("classclassclassclass" + i);
sch.setStudents(i);
sch.setYear("yearyearyearyearyear" + i);
sch.setCles(cls);
ls.add(sch);
}

System.out.println("写入成功!");
System.out.println(ls.size());
try {
outStream = new FileOutputStream("C:/20.dat");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(
outStream);
objectOutputStream.writeObject(ls);

outStream.close();
System.out.println("successful");
} catch (FileNotFoundException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
给看看这段代码有没有优化的空间,写入的时候会报错“Exception in thread "main" java.lang.OutOfMemoryError: Java heap space”
------解决方案--------------------
你放弃ls,直接边生成,边往OOS里面写吧。
------解决方案--------------------

for (int i = 0; i < 10000000; i++) {
sch = new school();
cls = new classes();
ls.add(sch);
}


只要这一段代码就足够你OOM了,怎么可以构造100w个对象放进list?这种肯定会内存溢出的。

可以构造一个对象写一次文件,这样就不会溢出了
------解决方案--------------------
往list里面写100万条数据,LZ的想法挺够奇特的
------解决方案--------------------
引用:
Quote: 引用:

你放弃ls,直接边生成,边往OOS里面写吧。

按照你的方法直接往OOS里面写比先放到list在往OOS里面写容量要大一倍多啊?

多一倍??!!你不会写完了再把ls又写了一次吧??!!

放弃ls,直接边生成,边往OOS里面写吧。
------解决方案--------------------
http://zhidao.baidu.com/link?url=mbvhpmXBpVDrb3aoZloqwu39InKcPe6tfCdkQiQ9Lb2OtTTnrq_lzAj3YTvZskmvnZJUFHC2aEOWtw_Hyhl_9_
  相关解决方案