我正在使用具有全局缓存的应用程序,并且我们也有数据发布者。问题是我们经常面临内存不足的问题。现在做了一些调整,但还不够。我们有大量的年轻一代和终身一代的对象。大多数情况下,应用程序会进入终身生成,因此会抛出 OutOfMemoryError。
由于我们有 2 个 CPU 主机,我们可以应用吞吐量收集器来避免暂停时间,但它主要收集年轻代,因此我们使用并发低暂停收集器。
为此应用程序调整 VM 的最佳方法是什么?
如何增加 Minor GC,从而控制我们的终身生成。
提前致谢。
最佳答案
我的第一个想法是使用WeakHashMap,但后来我发现了这篇文章:WeakHashMap is not a cache 。请参阅该文章中的链接,也许您还会发现 apache commons适合。
在我看来,最佳实践是不要实现自己的缓存,特别是如果它是一个核心且重要的组件。最好使用图书馆。否则,您将始终需要“调整”您的实现,并且新的问题仍然会一遍又一遍地出现。因此,即使您的应用程序中已经有自定义缓存,切换到可靠库的努力也会得到返回。
关于java - 当应用程序具有全局缓存时垃圾收集的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10010872/