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的想法挺够奇特的
------解决方案--------------------
多一倍??!!你不会写完了再把ls又写了一次吧??!!
你放弃ls,直接边生成,边往OOS里面写吧。
------解决方案--------------------
http://zhidao.baidu.com/link?url=mbvhpmXBpVDrb3aoZloqwu39InKcPe6tfCdkQiQ9Lb2OtTTnrq_lzAj3YTvZskmvnZJUFHC2aEOWtw_Hyhl_9_