gpt4 book ai didi

java - 尝试计算对象图的大小时达到了 1.000 个对象引用的配置限制

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:56:58 26 4
gpt4 key购买 nike

我有一个 jhipster 项目,我添加了一些实体。
我的服务很慢,因为这个警告消息:

The configured limit of 1.000 object references was reached while attempting to calculate the size of the object graph. Severe performance degradation could occur if the sizing operation continues. This can be avoided by setting the CacheManger or Cache <sizeOfPolicy> elements maxDepthExceededBehavior to "abort" or adding stop points with @IgnoreSizeOf annotations. If performance degradation is NOT an issue at the configured limit, raise the limit value using the CacheManager or Cache <sizeOfPolicy> elements maxDepth attribute. For more information, see the Ehcache configuration documentation.

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

最佳答案

这是Ehcache official documentation关于缓存条目的大小:

缓存条目的大小

放入内存受限缓存中的元素将具有其内存大小测量。添加到缓存中的整个 Element 实例被测量,包括键和值,以及添加的内存占用该实例到内部数据结构。键值测量作为对象图——每个引用都被跟随并且对象引用也测了。这递归地进行。

共享引用将由引用它的每个类来衡量。这将导致夸大其词。共享引用应该因此被忽略。

限制遍历对象图的配置

调整缓存大小涉及遍历对象图,这个过程可以用注释来限制。此过程也可以在 CacheManager 和缓存级别进行控制。

通过在 resources/ehcache.xml 中的 CacheManager 级别添加以下元素来控制在调整堆上元素大小时引擎大小的深度。

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

该元素具有以下属性:

  • maxDepth它控制在 size-of 引擎采取任何行动之前可以访问多少链接对象。 此属性是必需的

  • maxDepthExceededBehavior它指定在调整对象图大小时超过最大深度时会发生什么。该字段的可能值为:

  • continue哪个力量记录警告并继续调整大小的引擎大小手术。如果未指定此属性,continue是个使用的行为

  • abort这会强制 size-of engine 中止调整大小,记录警告,并将缓存标记为未正确跟踪内存使用情况。使用此设置,Ehcache.hasAbortedSizeOf()返回 true

可以在缓存管理器级别配置 SizeOf 策略(直接在 <ehcache> 下)和缓存级别(在 <cache> 下或 <defaultCache> ).缓存策略总是覆盖缓存管理器如果两者都设置了一个。 这个元素对分布式没有影响缓存。

关于java - 尝试计算对象图的大小时达到了 1.000 个对象引用的配置限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35074727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com