簡體   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