我正在尝试使用libgdx的MeshPartBuilder从一个设置的tile中创建一个Model,我注意到当我生成Model时,内存使用量增加了大约200MB并且没有降低,但是当我在做Thread.sleep(),它保持在正常水平。
这是我打电话准备模型的方法。
public void updateModel() {
System.out.println("Updating model for chuck " + chunkUUID.toString());
ModelBuilder mdlBuilder = new ModelBuilder();
mdlBuilder.begin();
MeshPartBuilder meshBuilder = null;
for(int y = 0; y < size[1]; y++) {
for(int x = 0; x < size[0]; x++) {
if(tiles[x][y] == null) {
System.out.println(x+":"+y+" is null");
continue;
}
tiles[x][y].getModel(chunkUUID.toString() + "." + x + ":" + y, this, mdlBuilder, meshBuilder, modelOffset[0] + x, modelOffset[1],
modelOffset[2] + y);
}
System.out.println(y);
try {
Thread.sleep(250L);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
model = mdlBuilder.end();
iModel = new ModelInstance(model);
}
这是在循环中调用的getModel方法。
public void getModel(String partId, Chunk chunk, ModelBuilder mdlBuilder, MeshPartBuilder mshBuilder, float offsetX, float offsetY, float offsetZ) {
int counter = 0;
mshBuilder = mdlBuilder.part(partId+"."+counter, GL20.GL_TRIANGLES, vrtxAttr, material);
mshBuilder.rect(
offsetX, offsetY+cornersHeight[0], offsetZ,
offsetX, offsetY+cornersHeight[1], offsetZ+1F,
offsetX+1F, offsetY+cornersHeight[2], offsetZ+1F,
offsetX+1F, offsetY+cornersHeight[3], offsetZ,
0,1,0);
}
更改材料似乎没有帮助,如果我将睡眠长度减少到10毫秒,则内存使用率会再次上升。
但是,用System.gc()替换Thread.sleep部分会有所帮助,但效果不同(20-40MB以上)。
有没有人知道为什么这是一个hapenning,如果有解决方案?,