我有一个程序可以解析数十万个文件,存储每个文件的数据,最后将一些数据打印到excel文档中。
这些是我在内存方面遇到和处理的一些错误:
java.lang.OutOfMemoryError:Java堆空间 内存增加到2GB
VM初始化期间发生错误。无法为2097152KB对象堆保留足够的空间 下载了64位机器的jre8。将-d64设置为默认的vm参数之一
java.lang.OurOfMemoryError:超出了GC开销限制 将Java堆内存从2gb增加到3g并包含此参数-XX:-UseGCOverheadLimit
所以现在我的默认VM参数是:-d64 -Xmx3g -XX:-UseGCOverheadLimit
问题是我的程序运行了几个小时,从所有这些文件读入并存储了我需要的所有信息,然后在发生内存错误时尝试打印所有内容时最后抛出错误。 / p>
我想知道的是,如果有一种方法来存储提取的数据,然后再次访问它,即使程序由于错误而退出。我想存储数据的方式与我在程序中使用的格式相同。例如,假设我有几十万个用户记录文件,我遍历了所有这些文件,存储了我在用户对象中提取的数据,并且我将这些用户和其他个人定义的对象存储在HashMaps和LinkedLists中。有没有办法存储这些用户对象和HashMaps和LinkedLists的方式即使程序由于错误退出我可以编写另一个程序,将通过目前存储的对象并打印出我想要的信息而不用经历读入,提取和存储信息的过程?
答案 0 :(得分:0)
这样做的一种方法称为序列化。 (What is object serialization?)。
但是,根据您的数据,您可以将信息写入一个方便的XML文件中,在提取所有数据后,只需加载XML并继续操作。
希望有所帮助。
答案 1 :(得分:0)