0

我在我的 Java 项目中使用 eclipselink JPA

    <persistence-unit name="...." transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <mapping-file>META-INF/tm-mapping.xml</mapping-file>
    <class>...</class>
    <properties>
        <property name="eclipselink.jdbc.batch-writing" value="Oracle-JDBC" />
        <property name="eclipselink.jdbc.cache-statements" value="true" />
        <property name="eclipselink.jdbc.native-sql" value="true" />
        <property name="eclipselink.cache.size.default" value="1000" />
        <property name="eclipselink.persistence-context.flush-mode" value="COMMIT" />
    </properties>
</persistence-unit>

为了提高性能,我使用刷新模式提交。但是当我为脚本提供更多数据时,我会内存不足,GC 会发疯。正如我在堆转储中看到的,用于插入的 Eclipse 链接缓存太大,所以当缓存很大时,可能有任何参数可以刷新插入。

4

1 回答 1

1

如果您正在使用创建数千个对象的批处理过程,则需要确保您的 JVM 有足够的内存来保存所有这些对象。每个持久调用都需要 EntityManager 保存实体,直到它被释放。当 EntityManager 关闭、清除或实体被驱逐时会发生这种情况。

您可以每隔一段时间使用 em.clear() 强制清除缓存,并在此之前调用 em.flush() 以确保首先将更改推送到数据库。

于 2013-02-07T12:29:23.760 回答