java - 当应用程序具有全局缓存时垃圾收集的最佳实践

标签 java

我正在使用具有全局缓存的应用程序,并且我们也有数据发布者。问题是我们经常面临内存不足的问题。现在做了一些调整,但还不够。我们有大量的年轻一代和终身一代的对象。大多数情况下,应用程序会进入终身生成,因此会抛出 OutOfMemoryError。

由于我们有 2 个 CPU 主机,我们可以应用吞吐量收集器来避免暂停时间,但它主要收集年轻代,因此我们使用并发低暂停收集器。

为此应用程序调整 VM 的最佳方法是什么?

如何增加 Minor GC,从而控制我们的终身生成。

提前致谢。

最佳答案

我的第一个想法是使用WeakHashMap,但后来我发现了这篇文章:WeakHashMap is not a cache 。请参阅该文章中的链接,也许您还会发现 apache commons适合。

在我看来,最佳实践是不要实现自己的缓存,特别是如果它是一个核心且重要的组件。最好使用图书馆。否则,您将始终需要“调整”您的实现,并且新的问题仍然会一遍又一遍地出现。因此,即使您的应用程序中已经有自定义缓存,切换到可靠库的努力也会得到返回。

关于java - 当应用程序具有全局缓存时垃圾收集的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10010872/

相关文章:

java - 如何使用 arraylist 根据用户定义的排序对类对象进行排序?

java - try block 内声明的变量无法解析

java - 向 Google Admin Directory API 进行身份验证

java - geotools、DefaultFeatureCollection 添加到 MapContent 时出错

java - 从 3.0.1 更新到 3.1 后,Android Studio 未启动

java - Liquibase插入BIT列,MySQL,列数据太长

java - Ektorp 依赖导致 Spring boot 应用程序崩溃

Java:将转义字符读取为 '\' 后跟一个字符?

java - src.type() == CV_8UC1 断言在校正图像时失败

java - Autowired 带注释的 bean 在 Listener 类中获取 null