PersistenceException:回滚时出现意外错误

时间:2013-08-14 20:03:31

标签: java memory transactions

由于OOM错误,我收到 PersistenceException 异常。

Exception in thread "Thread-7" java.lang.OutOfMemoryError: GC overhead limit exceeded
        at java.util.Arrays.copyOf(Arrays.java:2271)
        at java.lang.StringCoding.safeTrim(StringCoding.java:79)
        at java.lang.StringCoding.access$300(StringCoding.java:50)
        at java.lang.StringCoding$StringEncoder.encode(StringCoding.java:305)
        at java.lang.StringCoding.encode(StringCoding.java:344)
        at java.lang.String.getBytes(String.java:916)Heap dump file created [464734012 bytes in 39.704 secs]

我正在尝试处理具有80-100k行的文件。每行将作为一行存储在表中。每行约有15-20个属性。我想了解数据库事务(@Transactional)需要多少内存才能将它们保留在实体管理器中并一次性保留它们? 由于我们的架构设计限制,批处理是不可行的。

请帮忙。

2 个答案:

答案 0 :(得分:1)

如果您逐行阅读并收到此错误,我遇到了类似的问题。我们不得不处理大文件,而不是刷新缓存。我忘记了,我很久没有使用它了,ORM是休眠的,我们不得不在实体管理器上添加一个flush或clear的调用(你也想确保你没有做任何事情。单个事务,也会导致OOM)。当我发现插件继续填充缓存直到你得到一个OOM时,我感到很惊讶。

答案 1 :(得分:0)

您是否可以发布用于浏览测试文件的代码片段并将每行保存到数据库表中的一行?