【发布时间】:2016-11-02 19:43:53
【问题描述】:
我正在使用 libGDX,并且有一个类 Pools 包含 ObjectMap 和 Pool(s)。
为effects/projectiles创建单独的ObjectMaps 或使用Pools 类更好(简单的方法)。
一个大的ObjectMap 不会减慢get(Class) 方法或者性能损失可以接受吗?
Java 文档:
/** 无序映射。这个实现是一个使用 3 的布谷鸟哈希映射 散列、随机游走和有问题的 * 键的小存储。 不允许使用空键。允许空值。没有分配是 除非在增加表大小时完成。
*
* 这张地图 执行非常快的获取、包含密钥和删除(通常为 O(1),最差 情况 O(log(n)))。放可能会慢一点,*取决于哈希 碰撞。负载系数大于 0.91 大大增加 地图将不得不重新散列到 * 下一个更高的 POT 大小的机会。 * @作者内森·斯威特 */
【问题讨论】:
-
如果你有数百万个条目,它会慢一点,但你更有可能首先耗尽内存。我建议您先分析您的应用程序,然后再考虑可能会降低应用程序速度的所有因素,因为即使您专门从事 Java 性能调优十多年,猜测也几乎总是错误的。
-
另外有一只老鼠。
-
如果你有这么多的数据类,查找它们的键需要太多时间,这表明一个更严重的设计问题。
-
ObjectMap 具有恒定的时间查找(本质上)。具有许多条目的映射不会比具有少量条目的映射花费更长的时间来查找键的值。
标签: java performance libgdx hashmap