我在當前項目中遇到了一些問題。希望有人能夠幫助。將對象寫入Java文件時內存不足
在我的項目中,我必須從數據庫加載數據並保存到HashMap並進行處理(大約有5百萬條記錄)。
它工作的很好。對於一些小小的調整,我決定將這個HashMap對象保存到文件中,並希望這會爲我節省一些時間,以便重新運行此程序。
當我將該HashMap寫入文件時出現問題。它耗盡內存。
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("filename"));
out.writeObject(hashMap);
out.flush();
out.close();
我的問題是
- 我能做些什麼解決這個問題呢?
- 什麼使得它在保存對象時耗盡內存,導致當我正在處理這個HashMap時它很好,當保存對象時它不需要額外的內存(我是錯的)。
(我開發它在我的Eclipse和運行在Eclipse的Java應用程序測試)
更新堆棧跟蹤
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和我認爲這不是問題。
歡迎任何建議! 謝謝。
請發佈堆棧跟蹤。 – Kishore
你的'HashMap'包含多少個對象? –
我希望你的磁盤有足夠的空間?或者你得到java permSpace內存錯誤? –