EHCache SizeOf警告

时间:2017-10-27 19:20:34

标签: hibernate ehcache sizeof

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

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

我没有将任何限制设置为1000.但是在看到此警告后,我将sizeOfPolicy定义为10000.但是我仍然看到警告。

尝试计算时,已达到配置的1000个对象引用限制

net.sf.ehcache.pool.SizeOf deepsize

  1. 请建议可能的解决方案?
  2. 如果我不解决此警告会有什么影响?
  3. 我应该通过在模型对象上放置@Ignoresizeof注释来忽略这些警告吗?如果是的话,有什么影响?

3 个答案:

答案 0 :(得分:0)

您的问题的答案:

  1. deepSize表示您正在缓存相当大的对象图 - 超过10,000个不同的对象。
  2. 缓存大小计算将关闭,在最糟糕的情况下,在缓存开始驱逐之前,内存将耗尽。
  3. 你可以这样做,但是,除非这些是不应该计算的共享对象,否则这样做会弄乱大小计算。

答案 1 :(得分:0)

幻数" 1000 "是ehCache在记录警告消息之前遍历的默认深度,然后继续调整对象图的大小。 (他们似乎从ehCache版本2.5.0开始引入了这个)。请参阅以下链接:

http://grepcode.com/file/repo1.maven.org/maven2/net.sf.ehcache/ehcache-core/2.6.2/net/sf/ehcache/config/SizeOfPolicyConfiguration.java/

但是,可以使用正确的配置指令更改此默认行为。对于您提到的版本,请查看 限制已遍历对象图的配置 部分'来自以下官方文件:

http://www.ehcache.org/documentation/ehcache-2.6.x-documentation.pdf

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

答案 2 :(得分:0)

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

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

这在 sizeof 中由 FilterConfigurators 解决。我已经分叉了针对 Hibernate 4 的 ehcache-sizeof-hibernate 存储库并将其修复为适用于 Hibernate 5 here