我正在使用ARM设备上的实时应用程序。性能很重要,所以我使用通用的ObjectPool类。
到目前为止,我会将池预先分配到我预期的最大大小,但现在我遇到的情况是我绝对必须调整池的大小。
看过网络上的一些解决方案和SO后,我注意到调整大小始终是一个触发GC的数组复制操作。我认为这没关系,但现在开始看到性能命中很重要。
是否有真正可调整大小的对象池解决方案/模式产生零垃圾?
答案 0 :(得分:0)
我会编写一个内部使用链表的对象池。这将允许您的池根据需要增长。并且池应该从该链表的开头添加和删除。这反过来将保证当压力低时可以重复使用相同的物体。
另一方面,构建和/或拆除这些物品是否昂贵?因为首先使用池的一个原因是管理创建和销毁昂贵的对象。
使用池的另一个关键原因是重用对象,你几乎总是从池中获取第一个对象,希望这些对象在cpu cache中可用。事实上,你在池中用完了对象,这表明你没有从池中获益太多。
所以我的建议是在你开始编写一个新的对象池之前,也许你应该尝试删除池,看看当你让GC发挥其魔力时它会如何影响性能。