Hibernate EHCache SizeOf警告

Hibernate EHCache SizeOf警告,hibernate,ehcache,sizeof,Hibernate,Ehcache,Sizeof,我正在使用带有Hibernate 4的EHCache 2.6.9版。我在日志中看到以下警告: net.sf.ehcache.pool.SizeOf.ObjectGraphWalker checkMaxDepth在尝试计算对象图的大小时,已达到1000个对象引用的配置限制 我没有设定1000的上限。但是,在看到此警告后,我将SizeOffPolicy定义为10000。然而,我仍然看到了警告 尝试计算时,已达到配置的1000个对象引用的限制的net.sf.ehcache.pool.SizeOfdee

我正在使用带有Hibernate 4的EHCache 2.6.9版。我在日志中看到以下警告:

net.sf.ehcache.pool.SizeOf.ObjectGraphWalker checkMaxDepth在尝试计算对象图的大小时,已达到1000个对象引用的配置限制

我没有设定1000的上限。但是,在看到此警告后,我将SizeOffPolicy定义为10000。然而,我仍然看到了警告

尝试计算时,已达到配置的1000个对象引用的限制的net.sf.ehcache.pool.SizeOfdeepsize

  • 请提出可能的解决方案
  • 如果我不修复此警告,会产生什么影响
  • 我是否应该通过在模型对象上放置@Ignoresizeof注释来忽略这些警告?如果是,影响是什么
    回答你的问题:

  • deepSize表示您正在缓存相当大的对象图——超过10000个不同的对象
  • 缓存大小计算将关闭,最糟糕的情况是,在缓存开始逐出之前,内存将耗尽
  • 您可以这样做,但同样,除非这些对象是不应该被计算的共享对象,否则这样做会打乱大小计算
  • 幻数“1000”是ehCache在记录警告消息并继续调整对象图大小之前所经过的默认深度。(他们似乎从ehCache 2.5.0版开始就引入了这一功能)。请参见以下链接:

    但是,可以使用适当的配置指令更改此默认行为。对于您提到的版本,请检查以下官方文档中的“限制遍历对象图的配置”部分:


    我看到@Louis按顺序回答了你所有的问题。您可能需要运行一些测试(可能是load/perf测试),以查看您希望控制遍历深度的程度,从而根据您的应用程序行为和需要对其进行调整。

    没有人在您的问题中提到Hibernate问题

    您看到的问题很可能是因为SizeOf组件正在遍历Hibernate基础结构的某些部分,例如会话

    这由sizeof中的FilterConfiguration解决。我已经将hibernate存储库的ehcache sizeof分叉,以hibernate 4为目标,并将其修复为适用于hibernate 5