java - 持久异常 : unexpected error when rollbacking

标签 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)需要多少内存才能将它们保存在实体管理器中并一次性保存它们? 由于我们的架构设计限制,批处理是不可行的。

请帮忙。

最佳答案

如果您逐行阅读并收到此错误,我也遇到了类似的问题。我们必须处理大文件,并且没有刷新缓存。我忘记了,我已经很长时间没有使用它了,ORM 处于 hibernate 状态,我们必须在实体管理器上添加对刷新或清除的调用(您还想确保您没有在单个事务中执行所有操作,这也会导致 OOM)。当我发现插入不断填充缓存直到出现 OOM 时,我感到很惊讶。

关于java - 持久异常 : unexpected error when rollbacking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18241210/

相关文章:

sql - 如何防止并发事务中的数据库死锁?

java - 默认情况下将 Component.ouputMarkupId 设置为 false 背后的设计决策是什么?

c++ - 如何以相当可移植的方式以编程方式检查内存使用情况? (C/C++)

caching - 如何查找缓存模拟器中的冲突未命中数

c - 在堆中释放一个内存块

transactions - Camel 事务异常处理

c# - 在事务中使用 SqlCommand 时,我应该调用 Parameters.Clear 吗?

java - 为什么 Files.move 无法识别 CopyOption?

java - 要存储在数据库中的枚举

java - 将 PImage 转换为 Mat - Processing IDE P3D (OpenGL) 渲染器中的 Java OpenCV