java在libGDX中使用Pool<>类 3 月,4 周 Questions & Answers 4910 如何以及为什么在libGDX中使用Pool?官方开发指南中没有关于这个类的内容,只是在一些示例中使用了它
# 1 楼答案 Pool类是一种避免垃圾收集开销的优化。缺点是必须手动管理池中的对象(必须记住释放它们以便重用),并且对象必须是可重用的(例如,通常没有final字段) 在libGDX中,Pool类用于在每个帧上分配的对象(如操作和事件) 您可以忽略自己代码的池,直到遇到生成太多垃圾的问题 如何使用池 Pool<>管理单一类型的对象,因此它由该类型参数化。对象是通过调用obtain从特定的Pool实例获取的,然后应该通过调用free返回到池中。池中的对象可以选择性地实现^{}接口(只需要存在reset()方法),在这种情况下Pool将在对象返回池时自动重置对象。对象最初是按需分配的(因此,如果从不调用obtain,则池将不包含任何对象) 您必须实现自己的Pool<>子类,因为newObject方法是抽象的 池注意事项 小心泄漏对池对象的引用。仅仅因为您在池上调用了“free”,就不会使任何未完成的引用无效。如果你不小心的话,这可能会导致微妙的错误。如果将对象放入池中时对象的状态未完全重置,也可能会产生细微的错误
# 1 楼答案
Pool类是一种避免垃圾收集开销的优化。缺点是必须手动管理池中的对象(必须记住释放它们以便重用),并且对象必须是可重用的(例如,通常没有
final
字段)在libGDX中,
Pool
类用于在每个帧上分配的对象(如操作和事件)您可以忽略自己代码的池,直到遇到生成太多垃圾的问题
如何使用池
Pool<>
管理单一类型的对象,因此它由该类型参数化。对象是通过调用obtain
从特定的Pool
实例获取的,然后应该通过调用free
返回到池中。池中的对象可以选择性地实现^{reset()
方法),在这种情况下Pool
将在对象返回池时自动重置对象。对象最初是按需分配的(因此,如果从不调用obtain
,则池将不包含任何对象)您必须实现自己的
Pool<>
子类,因为newObject
方法是抽象的池注意事项
小心泄漏对池对象的引用。仅仅因为您在池上调用了“free”,就不会使任何未完成的引用无效。如果你不小心的话,这可能会导致微妙的错误。如果将对象放入池中时对象的状态未完全重置,也可能会产生细微的错误