【发布时间】:2014-03-27 07:57:24
【问题描述】:
我有一个巨大的文件,其中包含由 ObjectOutputStream 一个接一个写入的对象列表。
for (Object obj : currentList){
oos.writeUnshared(obj);
}
现在我想使用 ObjectInputStream 读取这个文件。但是,我需要同时读取多个文件,所以无法将整个文件读入内存。 但是,使用 ObjectInputStream 会导致 Heap Out Of Memory 错误。根据我的阅读,这是因为 ObjectInputStream 存在内存泄漏,并且即使在返回读取对象后仍保持对读取对象的引用。
我怎样才能要求 ObjectInputStream 不维护其阅读内容的引用?
【问题讨论】:
-
我在写的时候关闭了流。在阅读它时,我同时阅读了大约 100 个文件,并且所有这些流都一起打开。我只有在读取了相应的文件后才关闭它们。但是,内存泄漏肯定会发生在 ObjectInputStream 中,因为在给定时间应该只有 100 个对象存储在内存中。
-
为什么不尝试批量读取文件。例如,对于 100 个文件,您可以进行 4 个批次,这样最初将读取包含 25 个文件的批次 1,然后将读取批次 2 .. 等等..
标签: java memory-leaks objectinputstream objectoutputstream