我目前的项目遇到了一些麻烦。希望有人能帮忙。
在我的项目中,我必须从数据库加载数据并保存到 HashMap 并进行处理(大约有 500 万条记录)。
它工作得很好。对于一些小的调整,我决定将这个 HashMap 对象保存到文件中,希望这能在我必须重新运行这个程序时节省一些时间。
当我将该 HashMap 写入文件时,问题就出现了。它内存不足。
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("filename"));
out.writeObject(hashMap);
out.flush();
out.close();
我的问题是
- 我能做些什么来解决这个问题?
- 是什么导致它在保存对象时耗尽内存,因为当我处理这个 HashMap 时它很好,而在保存对象时它不需要额外的内存(我错了)。
(我正在我的 Eclipse 中开发它并通过Run as java app in Eclipse 对其进行测试)
更新堆栈跟踪
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.io.ObjectOutputStream$HandleTable.growEntries(ObjectOutputStream.java:2331)
at java.io.ObjectOutputStream$HandleTable.assign(ObjectOutputStream.java:2256)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1412)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at java.util.HashMap.writeObject(HashMap.java:1100)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:975)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
我的磁盘空间约为 8GB,我认为这不是问题。
欢迎任何建议!谢谢你。