Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
-
Reviewed
Description
Parallel purge in ObjectPool is meaningless and will cause contention issue since ReferenceQueue#poll has synchronization (source code shown below)
public Reference<? extends T> poll() { if (head == null) return null; synchronized (lock) { return reallyPoll(); } }
We observed threads blocking on the purge method while using offheap bucket cache, and we could easily reproduce this by testing the 100% cache hit case in bucket cache with enough reading threads.
We propose to add a purgeLock and use tryLock to avoid parallel purge.