Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PersistenceException:回滚时出现意外错误_Java_Memory_Transactions - Fatal编程技术网

Java PersistenceException:回滚时出现意外错误

Java PersistenceException:回滚时出现意外错误,java,memory,transactions,Java,Memory,Transactions,由于OOM错误,我得到了持续异常 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.StringCo

由于OOM错误,我得到了持续异常

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个属性。我想了解DB事务(@Transactional)需要多少内存才能将它们保存在实体管理器中并一次性保存? 由于我们的架构设计限制,批处理是不可行的


请提供帮助。

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

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

如果您正在逐行读取,并且出现此错误,我也有类似的问题。我们必须处理大文件,并且没有刷新缓存。我忘了,我很久没有使用它了,ORM是hibernate,我们必须在实体管理器上添加一个刷新或清除调用(您还需要确保您不是在一个事务中完成所有操作,这也会导致OOM)。当我发现插入一直填充缓存直到你得到一个OOM时,我很惊讶

如果您正在逐行阅读,并且出现了这个错误,那么我也遇到了类似的问题。我们必须处理大文件,并且没有刷新缓存。我忘了,我很久没有使用它了,ORM是hibernate,我们必须在实体管理器上添加一个刷新或清除调用(您还需要确保您不是在一个事务中完成所有操作,这也会导致OOM)。当我发现插入一直填充缓存直到你得到一个OOM时,我很惊讶

是的,我在一个事务中执行所有插入操作,因为如果某个事务失败,我想回滚所有操作。我的用例是使所有插入都原子化。如何在多个事务中实现相同的功能?有什么想法吗?我不知道确切的答案,但我怀疑这并不容易。单个事务的问题(即使您不使用hibernate之类的工具,在hibernate中,除非明确清除,否则每次插入都会将实体保存在内存中)是,您将创建一个大的回滚段,这也会在应用程序端和数据库端造成问题。我怀疑不使用java就可以解决这个问题。也许有一些ETL工具可以提供帮助,但我还没有使用过。如果你有一个好的DBA,他们可能会有一些想法。是的,我在一个事务中做所有的插入,因为我想在某个事务失败时回滚所有内容。我的用例是使所有插入都原子化。如何在多个事务中实现相同的功能?有什么想法吗?我不知道确切的答案,但我怀疑这并不容易。单个事务的问题(即使您不使用hibernate之类的工具,在hibernate中,除非明确清除,否则每次插入都会将实体保存在内存中)是,您将创建一个大的回滚段,这也会在应用程序端和数据库端造成问题。我怀疑不使用java就可以解决这个问题。也许有一些ETL工具可以提供帮助,但我还没有使用过。如果你能接触到一位优秀的DBA,他们可能会有一些想法。