Как создать пул объектов для прослушивателей событий в Java или JavaScript

Я читал статьи о том, как пул объектов уменьшает сборку мусора для игр, особенно для слушателей событий, где ключевое событие постоянно создается и уничтожается. Они упоминают, как пул объектов уменьшит проблему с памятью, но нигде в коде не говорится, как на самом деле это сделать.

Как вы пул объектов для событий в JavaScript или Java?

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.

Другие вопросы по тегам