Java 在尝试计算对象图的大小时,已达到配置的1.000个对象引用的限制

Java 在尝试计算对象图的大小时,已达到配置的1.000个对象引用的限制,java,caching,ehcache,jhipster,Java,Caching,Ehcache,Jhipster,我有一个jhipster项目,并添加了一些实体。 我的服务非常慢,因为出现以下警告消息: 在尝试计算对象图的大小时,已达到配置的1.000个对象引用的限制。如果继续调整大小操作,可能会出现严重的性能下降。可以通过将CacheManager或Cache元素MaxDepthexceedBehavior设置为“中止”或添加带有@IgnoreSizeOf注释的停止点来避免这种情况。如果在配置的限制下性能降级不是问题,请使用CacheManager或Cache elements maxDepth属性提高限

我有一个jhipster项目,并添加了一些实体。
我的服务非常慢,因为出现以下警告消息:

在尝试计算对象图的大小时,已达到配置的1.000个对象引用的限制。如果继续调整大小操作,可能会出现严重的性能下降。可以通过将CacheManager或Cache元素MaxDepthexceedBehavior设置为“中止”或添加带有@IgnoreSizeOf注释的停止点来避免这种情况。如果在配置的限制下性能降级不是问题,请使用CacheManager或Cache elements maxDepth属性提高限制值。有关更多信息,请参阅Ehcache配置文档


我可以更改什么来增加此限制或取消项目中的缓存?

您可以在资源/ehcache.xml中添加以下标记。propertymaxdepthexceedbehavior=abort避免减慢服务速度。您还可以更改maxDepth以增加限制

<sizeOfPolicy maxDepth="1000" maxDepthExceededBehavior="abort" />

以下是有关调整缓存项大小的说明:

缓存项的大小
放入内存有限缓存的元素将具有其内存大小 仔细斟酌的测量添加到缓存中的整个元素实例, 包括键和值,以及添加的内存占用 将该实例转换为内部数据结构。关键和价值是衡量的 作为对象图–遵循每个引用,对象 还测量了参考值。这是递归的

共享引用将由引用它的每个类来度量。 这将导致夸大。共享引用应 因此,我们不能忽视这一点

限制遍历对象图的配置
调整缓存大小涉及遍历对象图,这一过程可能会受到注释的限制。此过程也可以在CacheManager和cache级别进行控制

resources/ehcache.xml

<sizeOfPolicy maxDepth="100" maxDepthExceededBehavior="abort" />  

此元素具有以下属性:

  • maxDepth
    它控制在引擎大小采取任何操作之前可以访问多少链接对象此属性是必需的

  • maxdepthexceedbehavior
    指定在调整对象图大小时超过最大深度时发生的情况。此字段的可能值为:

  • 继续
    强制 要记录警告并继续调整大小的引擎大小 活动如果未指定此属性,
    continue
    是 使用的行为

  • 中止
    强制引擎大小中止 调整大小、记录警告并将缓存标记为未正确跟踪 内存使用。使用此设置,
    Ehcache.hasAbortedSizeOf()返回
    
    true

可以在缓存管理器级别配置SizeOf策略 (直接在
下)和缓存级别(在
下),或
)。缓存策略始终覆盖缓存管理器 如果两者都已设置,则为一此元素对分布式系统没有影响
缓存。

取消缓存并不是人们通常用来加速事情的方法:)您需要指出在哪里使用缓存以及在哪种对象上使用缓存,这样您就可以理解为什么要一次缓存这么大的图形了。我正在使用ehcache3并以编程方式创建缓存管理器。如何在spring boot的ehcache3中以编程方式设置此字段。?