我现在的项目遇到了一些麻烦。希望有人可以提供帮助。
在我的项目中,我必须从数据库加载数据并保存到HashMap并处理它(大约有5百万条记录)。
它工作得很好。对于一些小的调整,我决定将这个HashMap对象保存到文件中,并希望这将节省我一些时间,我必须重新运行该程序。
当我将HashMap写入文件时出现问题。内存耗尽。
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("filename"));
out.writeObject(hashMap);
out.flush();
out.close();
我的问题是
(我在我的Eclipse中开发它并通过在Eclipse中以Java app 运行)进行测试
更新stacktrace
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,我认为这不是问题。
欢迎任何建议! 谢谢。
答案 0 :(得分:0)
Increase your heap memory:
It is possible to increase heap size allocated by the JVM in eclipse directly In eclipse IDE goto
Run---->Run Configurations---->Arguments
Enter -Xmx1g(It is used to set the max size like Xmx256m or Xmx1g...... m-->mb g--->gb)
答案 1 :(得分:0)
您始终可以尝试使用java -Xmx标志增加Java堆空间。例如,将您的程序运行为java -Xmx2G
。在Eclipse中你可以去Run - >运行配置 - >参数 - > VM参数并在框中键入-Xmx2G。