【问题标题】:Single Object Map or separate (large sizes)单个对象映射或单独(大尺寸)
【发布时间】:2016-11-02 19:43:53
【问题描述】:

我正在使用 libGDX,并且有一个类 Pools 包含 ObjectMapPool(s)。

effects/projectiles创建单独的ObjectMaps 或使用Pools 类更好(简单的方法)。

一个大的ObjectMap 不会减慢get(Class) 方法或者性能损失可以接受吗?

Java 文档:

/** 无序映射。这个实现是一个使用 3 的布谷鸟哈希映射 散列、随机游走和有问题的 * 键的小存储。 不允许使用空键。允许空值。没有分配是 除非在增加表大小时完成。
*
* 这张地图 执行非常快的获取、包含密钥和删除(通常为 O(1),最差 情况 O(log(n)))。放可能会慢一点,*取决于哈希 碰撞。负载系数大于 0.91 大大增加 地图将不得不重新散列到 * 下一个更高的 POT 大小的机会。 * @作者内森·斯威特 */

【问题讨论】:

  • 如果你有数百万个条目,它会慢一点,但你更有可能首先耗尽内存。我建议您先分析您的应用程序,然后再考虑可能会降低应用程序速度的所有因素,因为即使您专门从事 Java 性能调优十多年,猜测也几乎总是错误的。
  • 另外有一只老鼠。
  • 如果你有这么多的数据类,查找它们的键需要太多时间,这表明一个更严重的设计问题。
  • ObjectMap 具有恒定的时间查找(本质上)。具有许多条目的映射不会比具有少量条目的映射花费更长的时间来查找键的值。

标签: java performance libgdx hashmap


【解决方案1】:

你最好坚持使用Pools 类。我认为你误解了这门课的工作原理。 Pools 类存储一个 ObjectMap,它按类类型存储对象池。

例如,如果您执行Pools.obtain(Bullet.class),该类将找到一个Bullet 池,并从那里创建一个对象。您可能拥有的任何其他课程也会发生同样的情况。这意味着您实际上只有几个池,在一个 objectmap 中。

除非你有成千上万个不同数据类型的数据,否则使用这个类是完全没问题的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    相关资源
    最近更新 更多