【发布时间】:2013-05-07 12:36:31
【问题描述】:
创建(和发布)数百万个小对象的“最佳实践”是什么?
我正在用 Java 编写一个国际象棋程序,搜索算法为每个可能的移动生成一个“移动”对象,名义搜索每秒可以轻松生成超过一百万个移动对象。 JVM GC 已经能够处理我的开发系统上的负载,但我有兴趣探索以下替代方法:
- 尽量减少垃圾收集的开销,并且
- 减少低端系统的峰值内存占用。
绝大多数对象的生命周期都很短,但大约 1% 生成的移动会被持久化并作为持久值返回,因此任何池化或缓存技术都必须提供将特定对象排除在外的能力重复使用。
我不希望有完整的示例代码,但我希望得到进一步阅读/研究的建议,或类似性质的开源示例。
【问题讨论】:
-
享元模式是否适合您的情况? en.wikipedia.org/wiki/Flyweight_pattern
-
是否需要将其封装在一个对象中?
-
享元模式不合适,因为对象不共享重要的公共数据。至于将数据封装在一个对象中,它太大而无法打包成一个基元,这就是为什么我正在寻找 POJO 的替代品。