Java 使用MeshPartBuilder时,Thread.sleep可防止内存泄漏
我试图用libgdx的MeshPartBuilder从一组瓷砖中创建一个模型,我注意到,当我生成模型时,内存使用量增加了约200MB,但没有下降,但当我执行Thread.sleep()时,它保持在正常水平 下面是我调用的准备模型的方法Java 使用MeshPartBuilder时,Thread.sleep可防止内存泄漏,java,memory-leaks,libgdx,thread-sleep,Java,Memory Leaks,Libgdx,Thread Sleep,我试图用libgdx的MeshPartBuilder从一组瓷砖中创建一个模型,我注意到,当我生成模型时,内存使用量增加了约200MB,但没有下降,但当我执行Thread.sleep()时,它保持在正常水平 下面是我调用的准备模型的方法 public void updateModel() { System.out.println("Updating model for chuck " + chunkUUID.toString()); ModelBuilder mdlBuilder
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);
}
改变材料似乎没有什么帮助,如果我把睡眠时间缩短到10毫秒,内存使用率就会再次上升
但是,用System.gc()替换Thread.sleep部分会有所帮助,但效果并不相同(20-40MB以上)
有人知道为什么会出现这种情况以及是否有解决方案吗?最有可能的是Thread.sleep允许垃圾收集器在循环之间释放一些内存。@tsolakp我尝试在有或没有System.gc()的情况下,在这些函数之外使用Thread.sleep更长的时间,但它没有改变任何东西。
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);
}