【发布时间】:2012-02-28 11:06:35
【问题描述】:
我目前正在使用 Java 开发游戏引擎,但是例如在堆上分配大量对象时遇到性能问题
public class GLParticleSystem {
private GLParticle[] particles = new GLParticle[2000];
private int numberOfParticles;
public GLParticleSystem(numberOfParticles) {
this.numberOfParticles = numberOfParticles;
}
public void init() {
for (int i = 0; i < numberOfParticles; i++) {
particles[i] = new GLParticle();
}
}
}
由于分配的剪切级别,上面的代码在启动时会遭受大量的帧丢失,我想知道是否有我遗漏的东西或解决这个问题的一些文字。
更新
请求我的 GLParticle 类的数据成员。
public class GLParticle {
private GLSpriteSheet image = null;
private float x;
private float y;
private float vX;
private float vY;
private float alpha;
private float alphaStep;
private boolean isDead;
private long startTime;
private long lifeTime;
private final float u = 480f;
private final float v = 504f;
}
谢谢加里
【问题讨论】:
-
GLParticle类有多复杂?你能发布它的数据成员吗? -
init 是否在自己的线程中运行?
-
你能在任何图像显示之前进行初始化吗?
-
GLParticle 的 2k 个对象什么都不是,问题不在于分配本身。我敢打赌你初始化
GLSpriteSheet这将是主要问题,其余的真的没什么 -
(您可以从 cmets 推断,有很多方法可以减轻您所描述的内容。)
标签: java memory heap-memory large-object-heap