0

オブジェクト プーリングがゲームのガベージ コレクションをどのように削減するかについての記事を読んでいます。特に、キー イベントが常に作成および破棄されるイベント リスナーの場合です。彼らは、オブジェクト プーリングによってメモリの問題がどのように減少するかについて言及していますが、実際にそれを行う方法についてはコードのどこにも記述していません。

JavaScript または Java でイベントのプールをオブジェクト化するにはどうすればよいですか?

4

1 に答える 1

1

一般的なオブジェクト プーリングでは、基本的に、使用可能なオブジェクトの独自のリストを維持する必要があります。すべてのオブジェクトが同じタイプである場合、うまく機能します。クラス Thing があるとしたら、ThingPool があるかもしれません

import java.util.ArrayDeque;
import java.util.Deque;

public class ThingPool {

    public static class Thing {

    }
    // start with a big stack of objects
    Deque<Thing> stack = new ArrayDeque<Thing>(1000);
    /**
     * Gets a new instance. If one exists in the stack use that,
     * otherwise create a new one.
     * @return
     */
    public Thing getThing() {
        if(stack.isEmpty())
            return new Thing();
        return stack.pop();
    }
    /**
     * Does not actually delete it, just stores it for later use
     * @param thing
     */
    public void deleteThing(Thing thing) {
        stack.push(thing);
    }
    /**
     * You may need to clear your pool at some point
     * if you have a great many objects in it 
     */
    public void clear() {
        stack.clear();
    }
}

私は、C でこの手法を使用しました。いくつかの異なる既知のサイズの多数の行列を使用して重い作業を行っていて、ヒープの断片化の問題に苦しんでいたときです。

Cよりもメモリ管理がはるかに優れているJavaでは使用していません。

于 2014-03-20T13:51:39.780 に答える