由于 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)需要多少内存才能将它们保存在实体管理器中并一次性保存它们? 由于我们的架构设计限制,批处理是不可行的。
请帮忙。
最佳答案
如果您逐行阅读并收到此错误,我也遇到了类似的问题。我们必须处理大文件,并且没有刷新缓存。我忘记了,我已经很长时间没有使用它了,ORM 处于 hibernate 状态,我们必须在实体管理器上添加对刷新或清除的调用(您还想确保您没有在单个事务中执行所有操作,这也会导致 OOM)。当我发现插入不断填充缓存直到出现 OOM 时,我感到很惊讶。
关于java - 持久异常 : unexpected error when rollbacking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18241210/