Changed object pool so the responsibility to specify parameters after pool.take() is to the implementation, not the objectpool
This commit is contained in:
parent
74881a07f3
commit
9a76f75d42
|
@ -22,14 +22,5 @@ public class ByteBuffer2Poolable implements PoolableObject<ByteBuffer2> {
|
||||||
public ByteBuffer2 create() {
|
public ByteBuffer2 create() {
|
||||||
return new ByteBuffer2(8, -1);
|
return new ByteBuffer2(8, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void activate(ByteBuffer2 object) {
|
|
||||||
object.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void passivate(ByteBuffer2 object) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,6 @@ class FastObjectPool<T> implements ObjectPool<T> {
|
||||||
private static final boolean USED = false;
|
private static final boolean USED = false;
|
||||||
|
|
||||||
private final ObjectPoolHolder<T>[] objects;
|
private final ObjectPoolHolder<T>[] objects;
|
||||||
private final PoolableObject<T> poolableObject;
|
|
||||||
|
|
||||||
private volatile int takePointer;
|
private volatile int takePointer;
|
||||||
private volatile int releasePointer;
|
private volatile int releasePointer;
|
||||||
|
@ -45,7 +44,6 @@ class FastObjectPool<T> implements ObjectPool<T> {
|
||||||
|
|
||||||
FastObjectPool(PoolableObject<T> poolableObject, int size) {
|
FastObjectPool(PoolableObject<T> poolableObject, int size) {
|
||||||
|
|
||||||
this.poolableObject = poolableObject;
|
|
||||||
int newSize = 1;
|
int newSize = 1;
|
||||||
while (newSize < size) {
|
while (newSize < size) {
|
||||||
newSize = newSize << 1;
|
newSize = newSize << 1;
|
||||||
|
@ -76,7 +74,6 @@ class FastObjectPool<T> implements ObjectPool<T> {
|
||||||
ObjectPoolHolder<T> localObject = this.localValue.get();
|
ObjectPoolHolder<T> localObject = this.localValue.get();
|
||||||
if (localObject != null) {
|
if (localObject != null) {
|
||||||
if (localObject.state.compareAndSet(FREE, USED)) {
|
if (localObject.state.compareAndSet(FREE, USED)) {
|
||||||
this.poolableObject.activate(localObject.getValue());
|
|
||||||
return localObject;
|
return localObject;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,7 +92,6 @@ class FastObjectPool<T> implements ObjectPool<T> {
|
||||||
// as they might have one sitting on the cache
|
// as they might have one sitting on the cache
|
||||||
if (holder.state.compareAndSet(FREE, USED)) {
|
if (holder.state.compareAndSet(FREE, USED)) {
|
||||||
this.localValue.set(holder);
|
this.localValue.set(holder);
|
||||||
this.poolableObject.activate(holder.getValue());
|
|
||||||
return holder;
|
return holder;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,7 +111,6 @@ class FastObjectPool<T> implements ObjectPool<T> {
|
||||||
if (object.state.compareAndSet(USED, FREE)) {
|
if (object.state.compareAndSet(USED, FREE)) {
|
||||||
Sys.unsafe.putOrderedObject(this.objects, index, object);
|
Sys.unsafe.putOrderedObject(this.objects, index, object);
|
||||||
this.releasePointer = localValue+1;
|
this.releasePointer = localValue+1;
|
||||||
this.poolableObject.passivate(object.getValue());
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw new IllegalArgumentException("Invalid reference passed");
|
throw new IllegalArgumentException("Invalid reference passed");
|
||||||
|
|
|
@ -20,14 +20,4 @@ public interface PoolableObject<T> {
|
||||||
* called when a new instance is created
|
* called when a new instance is created
|
||||||
*/
|
*/
|
||||||
public T create();
|
public T create();
|
||||||
|
|
||||||
/**
|
|
||||||
* invoked on every instance that is borrowed from the pool
|
|
||||||
*/
|
|
||||||
public void activate(T object);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* invoked on every instance that is returned to the pool
|
|
||||||
*/
|
|
||||||
public void passivate(T object);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,6 @@ class SlowObjectPool<T> implements ObjectPool<T> {
|
||||||
|
|
||||||
|
|
||||||
private final LinkedBlockingDeque<ObjectPoolHolder<T>> queue;
|
private final LinkedBlockingDeque<ObjectPoolHolder<T>> queue;
|
||||||
private final PoolableObject<T> poolableObject;
|
|
||||||
|
|
||||||
private ThreadLocal<ObjectPoolHolder<T>> localValue = new ThreadLocal<>();
|
private ThreadLocal<ObjectPoolHolder<T>> localValue = new ThreadLocal<>();
|
||||||
|
|
||||||
|
@ -37,7 +36,6 @@ class SlowObjectPool<T> implements ObjectPool<T> {
|
||||||
|
|
||||||
this.queue = new LinkedBlockingDeque<ObjectPoolHolder<T>>(size);
|
this.queue = new LinkedBlockingDeque<ObjectPoolHolder<T>>(size);
|
||||||
|
|
||||||
this.poolableObject = poolableObject;
|
|
||||||
for (int x=0;x<size;x++) {
|
for (int x=0;x<size;x++) {
|
||||||
this.queue.add(new ObjectPoolHolder<T>(poolableObject.create()));
|
this.queue.add(new ObjectPoolHolder<T>(poolableObject.create()));
|
||||||
}
|
}
|
||||||
|
@ -49,7 +47,6 @@ class SlowObjectPool<T> implements ObjectPool<T> {
|
||||||
ObjectPoolHolder<T> localObject = this.localValue.get();
|
ObjectPoolHolder<T> localObject = this.localValue.get();
|
||||||
if (localObject != null) {
|
if (localObject != null) {
|
||||||
if (localObject.state.compareAndSet(FREE, USED)) {
|
if (localObject.state.compareAndSet(FREE, USED)) {
|
||||||
this.poolableObject.activate(localObject.getValue());
|
|
||||||
return localObject;
|
return localObject;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,7 +61,6 @@ class SlowObjectPool<T> implements ObjectPool<T> {
|
||||||
// as they might have one sitting on the cache
|
// as they might have one sitting on the cache
|
||||||
if (holder.state.compareAndSet(FREE, USED)) {
|
if (holder.state.compareAndSet(FREE, USED)) {
|
||||||
this.localValue.set(holder);
|
this.localValue.set(holder);
|
||||||
this.poolableObject.activate(holder.getValue());
|
|
||||||
return holder;
|
return holder;
|
||||||
} else {
|
} else {
|
||||||
// put it back into the queue
|
// put it back into the queue
|
||||||
|
@ -77,7 +73,6 @@ class SlowObjectPool<T> implements ObjectPool<T> {
|
||||||
public void release(ObjectPoolHolder<T> object) {
|
public void release(ObjectPoolHolder<T> object) {
|
||||||
if (object.state.compareAndSet(USED, FREE)) {
|
if (object.state.compareAndSet(USED, FREE)) {
|
||||||
this.queue.offer(object);
|
this.queue.offer(object);
|
||||||
this.poolableObject.passivate(object.getValue());
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw new IllegalArgumentException("Invalid reference passed");
|
throw new IllegalArgumentException("Invalid reference passed");
|
||||||
|
|
Loading…
Reference in New Issue
Block a user