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 に答える