大对象集的Java内存分配

标签 java memory heap-memory large-object-heap

我目前正在使用 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 的每个成员创建十个 2000 的独立数组,并使用 Flyweight Pattern .在此实现中,每个 GLParticle 都将其索引连同包含数组的 GLParticleSystem 实例一起传递到 GLParticleSystem 的数组中。这稍微麻烦一些,但是当拥有大量细粒度对象在 CPU 周期方面变得过于昂贵时,这是第一个尝试的模式。

关于大对象集的Java内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9169174/

相关文章:

ios - XCode 内存不足,但 Instruments 内存不足

python - 标记数据时出错。 C 错误 : out of memory pandas python, 大文件 csv

java - 执行 Broadleaf startadmin.bat 脚本时出错

java - 堆大小限制

c++ - 修剪延迟空闲队列时堆损坏

java - Liferay 中不同的 "request"隐式对象

Java Swing 线图

java - 在java中设计一个方法接收二维数组并操作其中的每一列

java - 复制数组的值

c++ - 在哪里定义PAINTSTRUCT,为什么要定义HDC?