Suggestions for improving this simple object pool class for Java?

I am currently writing an Android game where there are enemies that fly around the screen and then disappear to be replaced by other enemies. Now this happens very quickly, and my code is currently doing a lot of allocation and freeing up memory to create and delete these enemy objects, so I am trying to find a way to optimize this. I got this pool class implementation from an Android developer game book:

public class Pool<T> {
    public interface PoolObjectFactory<T> {
        public T createObject();
    }
    private final List<T>               freeObjects;
    private final PoolObjectFactory<T>  factory;
    private int                         maxObjects;

    public Pool(PoolObjectFactory<T> factory, int maxObjects) {
        this.maxObjects = maxObjects;
        this.factory = factory;
        freeObjects = new ArrayList<T>(maxObjects);
    }

    public T newObject() {
        T object = null;
        if (freeObjects.isEmpty()) {
            object = factory.createObject();
        } else {
            object = freeObjects.remove(freeObjects.size() - 1);
        }
        return object;
    }

    public void free(T object) {
        if (freeObjects.size() < maxObjects) freeObjects.add(object);
    }
}

Now the way to use this class is as follows:

PoolObjectFactory<Enemy> factory = new  PoolObjectFactory<Enemy>() { 
    public Enemy createObject() { 
        return  new  Enemy(); 
    } 
}; 
Pool<Enemy> enemyPool = new  Pool<Enemy>(factory, 50); 

, - createObject(), , . , Enemy, , . , :

PoolObjectFactory<Enemy> factory = new  PoolObjectFactory<Enemy>() { 
    public Enemy createObject(Object... args) { 
        return  new  Enemy((Float)args[0], (Float)args[1]); 
    } 
}; 
Pool<Enemy> enemyPool = new  Pool<Enemy>(factory, 50); 

. Enemy createObject() , , , .

? , java-, , ? .

+5
1

1) createObject PoolObjectFactory.

2) initialize(), EnemyObject. EnemyObject . , , , .

+1

All Articles