我的Java应用程序由于频繁的对象创建和处置而导致垃圾收集过多,因此我想实现一个对象池来重用对象并减少GC开销。如何设计一个无垃圾对象池,根据应用程序负载动态调整其大小(不创建垃圾)?您能否提供池化策略(尤其是池化增长)的实施示例或指南?
您可以使用没有固定大小的链表。随着池的增长,您可以不断向其中添加节点。类似这样的东西:
public class ObjectPool<T> {
private final LinkedList<T> pool = new LinkedList<>();
private final Creator<T> creator;
public ObjectPool(Creator<T> creator) {
this.creator = creator;
}
public T acquire() {
if (pool.isEmpty()) {
return factory.create();
}
return pool.removeFirst();
}
public void release(T obj) {
pool.addLast(obj);
}
public interface Creator<T> {
T create();
}
}