繁体   English   中英

如何在Java或JavaScript中为事件侦听器提供对象池

[英]How to Object pool for event Listeners in Java or JavaScript

我一直在阅读有关对象池如何减少游戏垃圾收集的文章,尤其是对于不断创建和销毁关键事件的事件侦听器。 他们提到对象池如何减少内存问题,但是代码中没有任何地方说明如何实际执行。

如何为JavaScript或Java中的事件提供对象池?

通常,对于对象池,您基本上需要维护自己的可用对象列表。 如果所有对象都是同一类型,则效果很好。 如果说您有一门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中使用它,因为Java具有比C更好的内存管理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM