我应该经常调用EntityManager.clear()来避免内存泄漏吗?

ece*_*ulm 8 java memory-leaks jpa entitymanager openjpa

我是JPA/OpenJPA的新手,我注意到如果我EntityManager.clear()在持久化实体之后不调用,我会得到一个OutOfMemoryError(我继续在循环中添加新实体).我不确定这是否是预期的行为,或者只是OpenJPA 1.2.1故障.

那么,我是否需要自己明确分离实体?如果我不是,那么这是一个很好的做法?

Pad*_*rag 6

我对JPA没有多少经验.但这很有用 -
在JPA中,您必须:
- 为每个事务创建一个新的EntityManager.
- 在每个事务之后调用clear()以清除持久性上下文.


Dat*_*eus 5

取决于您为持久性过程(读取)带来多少对象.如果处理大数(或某些对象很大),那么使用clear()可能有意义.每次读取对象时,都应该通过JPA impl将其放入L1缓存中.