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取得できます。dpaddpad.getTexture()

于 2011-08-23T09:09:17.870 に答える