2016-01-21 68 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每次进行脏检查时不断处理进行新的查询。

相关问题