2013-05-09 36 views
2

每次我們加載視圖以編輯記錄(以支持工作單元模式)時,我們採取了創建新EntityManager的方法。如何「處理」EntityManager

我們需要做什麼才能讓EntityManager被垃圾回收?我相信我們將發佈所有對管理員的引用,但Chrome的「Take Heap Snapshot」工具並不顯示EntityManager(或任何實體)在我們離開視圖時被刪除。

我看到每個實體的entityAspect.entityManager都有一個對經理的引用。這是否阻止了垃圾收集?

回答

1

看起來需要調用entityManager.clear()從管理器中分離所有實體,然後允許所有內容都被垃圾收集。

+0

這是正確的,每個實體擁有對其entityManager的引用,並且entityManager保持跟蹤其所有實體。因此,爲了清除內存,您需要從entityManager中分離所有實體,並丟棄對實體的任何參考。 EntityManager.clear執行其中的第一項,但您仍然需要「丟失」任何實體的任何參考。 – 2013-05-09 03:29:23

+0

如果我放棄對entityManager及其實體的所有引用,那麼不應該這樣做,因爲不需要調用entityManager.clear()就可以垃圾收集所有內容。 – pawel 2013-05-10 06:58:20

+0

每個實體擁有對其經理的引用是非常方便的,但確實創建了一個循環引用。這些實體讓經理保持活着,經理保持實體活着。唯一需要將整個事情推倒的是調用'entityManager.clear()' – Brendan 2013-05-10 10:41:23