【发布时间】:2010-09-28 14:23:47
【问题描述】:
我们有一个对象集合,随着时间的推移会变得非常大。我们已经实施了缓存策略来帮助缓解这种情况,但是如果在启动时没有分配足够的内存,我们仍然会在运行时耗尽堆空间。
是否有一种标准机制可以在运行时减小此缓存的大小以消除这些 OutOFMemory 错误?这样,如果我们的进程以比正常情况更小的内存片启动,我们有望避免服务器死机。
我意识到这是一种错误类型,因此不应被捕获/处理,因为它通常表示更严重的问题。
是不是就这么简单:
private static final long RECOMMENDED_MEMORY = 1073741824L; //Example 1 Gig
private static int recommendedCacheSize = 100; //Example of 100 items
long heapSize = Runtime.getRuntime().totalMemory();
double size = Math.floor((double) heapSize/RECOMMENDED_MEMORY * recommendedCacheSize);
recommendedCacheSize = ++size;
【问题讨论】:
-
注意:这是在Tomcat中运行的。
-
缓存是使用软引用还是弱引用构建的?
标签: java memory memory-management allocation