【发布时间】:2010-07-21 13:41:10
【问题描述】:
我正在处理的 Web 应用程序 (servlet) 中存在内存泄漏。我怀疑 1 个原因,想听听您对此的看法。
我使用 hashmaps、hashsets 等作为 DB(加载了大约 20MB 的数据)。这些地图,集合每 10 分钟重新加载一次。有大量的同时请求。我读到,GC 将在一段时间/周期内未收集的对象传递给较少检查或垃圾收集的一代(旧代和永久代)。我认为我对静态地图集的使用导致了我的泄漏问题。你怎么看?
【问题讨论】:
-
首先感谢您的回答。我会记住你的建议。这里有更多细节;每十分钟我按照以下步骤操作 1) 我在后台创建新地图(作为临时地图)。 2)通过调用 .clear() 方法清除旧地图(甚至在进行步骤 3 之前将它们分配为 null) 3)将新地图的引用提供给旧地图。我可以在这里遗漏什么吗?
-
访问这些地图的代码元素如何实际访问内容?您确定没有其他代码元素获取对静态 Map 本身的引用吗?将应用程序范围内的数据存储在静态变量中有点代码味道,如果设计不当,很容易导致泄漏问题。
标签: java arrays memory-leaks garbage-collection hashmap