1
我們正在處理循環中的大量實體對象。最後,我們將對象設置爲null以符合垃圾回收的條件。Hibernate evict()vs設置對象爲NULL
- 是對的還是我們需要使用hibernate evict()?
- evict一個對象與在循環結束時將對象標記爲null有什麼區別?
請幫忙詳細瞭解。
謝謝。
我們正在處理循環中的大量實體對象。最後,我們將對象設置爲null以符合垃圾回收的條件。Hibernate evict()vs設置對象爲NULL
請幫忙詳細瞭解。
謝謝。
只有將實體對象設置爲null纔會有幫助,因爲在Hibernate的第一級緩存中仍然會有對它的引用。所以它不會使它符合垃圾回收的條件。
當你驅逐對象時,你將把它從休眠緩存中取出,然後它將成爲垃圾回收的候選對象。因此,如果你想要它被垃圾收集,你將不得不將它標記爲null(清除你的引用),並從hibernate的緩存中清除它(清除hibernate的引用)。作爲一個方面說明,除了釋放內存空間(在垃圾回收之後),將實體從緩存中取出可以節省很多CPU時間,因爲這個緩存也會在Hibernate每次進行髒檢查時不斷處理進行新的查詢。
您正在處理'@ Entity'是否很重要?此外,'evict'只是將緩存中的對象從緩存中刪除,這樣您只能保持實體管理器緩存使用率較低。 – Smutje