1

不知这段代码会不会造成内存泄漏?因为我仍然不知道什么时候应该处理纹理。纹理应该放在方法的末尾吗?还是在未使用后单独处理?

private void loadAssets() {
    Texture texture = new Texture(Gdx.files.internal("data/controls.png"));
    TextureRegion[] buttons = TextureRegion.split(texture, 64, 64)[0];
    left = buttons[0];
    right = buttons[1];
    jump = buttons[2];
    cubeControl = buttons[3];
    cubeFollow =  TextureRegion.split(texture, 64, 64)[1][2];
    dpad = new TextureRegion(texture, 0, 64, 128, 128);     
    batch = new SpriteBatch();
    batch.getProjectionMatrix().setToOrtho2D(0, 0, 480, 320);
}

我真的不明白。为什么Java中仍然存在内存泄漏?

4

1 回答 1

6

查看 的来源TextureRegion,它保留了对 的引用,Texture但并没有真正获得它的“所有权”——它永远不会自己处置它。

按照这种方式,您不应该在方法结束时处理它,但您应该在和都完成时处理它 - 我怀疑这将是实例本身完成时 。(这可能意味着也可能不意味着你需要一个终结器——这取决于你是否可以控制这个对象的生命周期。)cubeFollowcubeControldpad

请注意,您不需要单独的字段来存储对 的引用Texture- 您可以通过dpad使用dpad.getTexture().

于 2011-08-23T09:09:17.870 回答