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 中使用了这种技术。

我没有在 Java 中使用过它,它的内存管理比 C 好得多。

于 2014-03-20T13:51:39.780 回答