0

我得到了一个由 22 个字段组成的简单 POJO,这些字段是从几个 CSV 文件中读取的。阅读器线程逐行读取文件,每行包含这 22 个字段的值并构造 POJO。每个对象都存储在 ConcurrentLinkedQueue 中。

问题是总行数约为 300 万。我在双 CPU 机器上从 Eclipse 运行我的程序,每台机器都有 8 个内核。我使用 -Xms1024m -Xmx1024m VM 参数。

问题是,在阅读了近 800000 行之后,为每一行构造 POJO 并将 POJO 提供给队列,我得到堆空间的 OutOfMemory 错误。

我的问题是这些对象是否可以存储在队列中而不会出现 OutOfMemory 问题?

4

2 回答 2

0

If you are curious exactly what fills your heap, try launching the jvm with the -XX:+HeapDumpOnOutOfMemoryError argument. A heap dump will be created when the out of memory error occurs, and you can open it using jvisualvm or Eclipse Memory Analyzer

于 2013-08-05T19:26:03.650 回答
0

好吧,您只是在消耗所有可用内存。JVM 在抛出 OutOfMemoryError 之前会尝试一切,所以除了增加堆大小 -> -Xmx2g (例如)之外,你不能做任何事情

于 2013-08-05T19:05:30.820 回答