Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用MeshPartBuilder时,Thread.sleep可防止内存泄漏_Java_Memory Leaks_Libgdx_Thread Sleep - Fatal编程技术网

Java 使用MeshPartBuilder时,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

我试图用libgdx的MeshPartBuilder从一组瓷砖中创建一个模型,我注意到,当我生成模型时,内存使用量增加了约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);
}
改变材料似乎没有什么帮助,如果我把睡眠时间缩短到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);
}