Как создать пул объектов для прослушивателей событий в 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.