我在我的应用程序中使用带有兵马俑的ehcache。当我使用赤土陶器的ehcache时,我的响应时间增加了700倍。我认为兵马俑正在花时间测量物体的大小,因为它给了我警告:
net.sf.ehcache.pool.sizeof.ObjectGraphWalker checkMaxDepth 警告: 已达到配置的1,000个对象引用的限制 试图计算对象图的大小。严重 如果大小调整操作继续,可能会发生性能下降。 通过设置CacheManger或Cache可以避免这种情况 元素maxDepthExceededBehavior为“中止”或添加停止点 使用@IgnoreSizeOf注释。如果性能下降不是 在配置的限制下发出,使用提高限制值 CacheManager或Cache元素maxDepth属性。对于 有关更多信息,请参阅Ehcache配置文档。
当我在课堂上使用@IgnoreSizeOf注释时,响应时间减少了很多。我的问题是使用@IgnoreSizeOf注释有什么缺点。对于它的使用方式以及它如何缩短我的应用程序的响应时间请帮助。 提前致谢。
答案 0 :(得分:7)
此注释与Terracotta聚类无关。我猜你在这个问题上发布了其他问题。
@IgnoreSizeOf注释将具有sizeOfEngine,用于测量缓存中条目的内存占用量,忽略缓存条目的带注释类(或整个包)或子图(带注释字段)的实例。
因此,如果您缓存的对象图具有“共享”子图,则您需要注释该图形以注释开头的字段。如果你忽略所有那么没有将被调整大小并且maxBytesLocalHeap设置没有语义(你最终会受到OOME的影响)。
您需要了解要缓存的对象图,才能正确使用注释。有关详细信息,请参阅http://ehcache.org/documentation/configuration/cache-size#built-in-sizing-computation-and-enforcement。
现在,针对您所看到的性能问题,您可能希望使用和不使用maxBytesLocalHeap设置以及使用和不使用群集进行测试,以尝试确定您的问题。但是我怀疑你的缓存可能超出了你的预期,从而导致了大人物的占用空间,以及开销聚类数据......