2016-01-21 71 views
1

我們正在處理循環中的大量實體對象。最後,我們將對象設置爲null以符合垃圾回收的條件。Hibernate evict()vs設置對象爲NULL

  1. 是對的還是我們需要使用hibernate evict()?
  2. evict一個對象與在循環結束時將對象標記爲null有什麼區別?

請幫忙詳細瞭解。

謝謝。

+0

您正在處理'@ Entity'是否很重要?此外,'evict'只是將緩存中的對象從緩存中刪除,這樣您只能保持實體管理器緩存使用率較低。 – Smutje

回答

2

只有將實體對象設置爲null纔會有幫助,因爲在Hibernate的第一級緩存中仍然會有對它的引用。所以它不會使它符合垃圾回收的條件。

當你驅逐對象時,你將把它從休眠緩存中取出,然後它將成爲垃圾回收的候選對象。因此,如果你想要它被垃圾收集,你將不得不將它標記爲null(清除你的引用),並從hibernate的緩存中清除它(清除hibernate的引用)。作爲一個方面說明,除了釋放內存空間(在垃圾回收之後),將實體從緩存中取出可以節省很多CPU時間,因爲這個緩存也會在Hibernate每次進行髒檢查時不斷處理進行新的查詢。

相關問題