【发布时间】:2010-12-07 21:54:20
【问题描述】:
我正在用 Java 制作游戏。我需要针对我的ArrayList 引起的当前运行时分配的一些解决方案。垃圾收集器每隔一分钟或 30 秒就会开始运行,因为我通过这个收集器调用绘制和更新方法。
我应该如何做一个非运行时分配解决方案?
提前致谢,如果需要,我的代码从我的 Manager 类发布在下面,其中包含对象的 ArrayList。:
一些代码:
@Override
public void draw(GL10 gl) {
final int size = objects.size();
for(int x = 0; x < size; x++) {
Object object = objects.get(x);
object.draw(gl);
}
}
public void add(Object parent) {
objects.add(parent);
}
//Get collection, and later we call the draw function from these objects
public ArrayList<Object> getObjects() {
return objects;
}
public int getNumberOfObjects() {
return objects.size();
}
更多解释: 我与此混合的原因是(1)我看到ArrayList 实现很慢并导致滞后,以及(2)我想合并对象/组件一起。当从我的 Thread 类触发更新调用时,它会通过我的集合,使用管理器的更新功能将内容发送到树/图。
当查看一个开源项目 Replica Island 时,我发现他使用了他自己编写的替代类 FixedSizeArray。由于我不太擅长 Java,所以我想让事情变得更简单,现在我正在寻找另一种解决方案。最后,他解释了他为什么要参加特殊课程:
FixedSizeArray 是标准 Java 集合(如 ArrayList)的替代方案。它旨在提供一个固定长度的连续数组,无需需要任何运行时分配即可对其进行访问、排序和搜索。此实现区分数组的“容量”(它可以包含的最大对象数)和数组的“计数”(插入数组的当前对象数)。诸如 set() 和 remove() 之类的操作只能对已经显式 add()-ed 到数组中的对象进行操作;即大于 getCount() 但小于 getCapacity() 的索引不能单独使用。
【问题讨论】:
-
垃圾收集器会运行很多。您完全无法控制它何时运行。你需要考虑到这一点。
-
是的,但是因为我已经阅读过这个主题,所以可以让它经常不触发。
-
你有多少个对象?
-
@Petro:目前,三个。但在开发过程中,这些将增加到大约 20 - 30 个。
-
只是好奇,你为什么要查询'mObjects'的大小,然后再使用'objects'。
标签: java android allocation