使用MeshPartBuilder时,Thread.sleep可防止内存泄漏

时间:2017-06-05 00:19:27

标签: java memory-leaks libgdx thread-sleep

我正在尝试使用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,如果有解决方案?,

0 个答案:

没有答案