【发布时间】:2010-11-16 23:23:57
【问题描述】:
我有一个应用程序,其内存配置文件如下所示:
(来源:kupio.com)
内存使用量缓慢向上爬行是由于分配了大量的小、简单、临时对象造成的。在内存不足的情况下(这是一个移动应用程序),与限制较少的内存量相比,GC 开销很明显。
由于我们知道,由于应用程序的性质,这些峰值会不断出现,因此我正在考虑某种类型的大量瞬态对象池(真棒名称)。这些对象将在应用程序的整个生命周期中存在,并尽可能重复使用(对象的生命周期很短且高度可预测)。
希望这将通过减少收集的对象数量并提高性能来减轻 GC 的影响。
显然,这也会有其自身的性能限制,因为“分配”会更昂贵,并且维护缓存本身会产生开销。
由于这将是对大量代码的相当大且侵入性的更改,我想知道是否有人尝试过类似的东西,是否有好处,或者是否有任何其他已知的方法来缓解 GC种情况。也欢迎有关管理可重用对象缓存的有效方法的想法。
【问题讨论】:
-
“大量潜在对象的大型缓存” == 池。
-
pool == "没那么有趣" :P
-
你知道你正在暂停吗?
-
pool == "标准术语"。
-
是的,有 GC 暂停。应用程序允许的内存越少,应用程序的速度就越慢。有了更多内存,应用程序感觉更快,但当它对用户不太重要时(基本上是在适当的时间调用 System.gc() 时)倾向于 GC。
标签: java memory-management caching java-me garbage-collection