[concurrency-interest] Concurrent Bounded Stack
stanimir at riflexo.com
Sat May 26 17:42:34 EDT 2012
I suppose the issue might have popped multiple times, yet I have not seen it
Stacks are great for object pools but the only available in JDK are either:
based on Vector or not thread safe (ArrayDeque), or don't have good size()
method (ConcurrentLinkedDeque). JSR codebase has a dead ConcurrentStack on
its own with slow size() method.
Some projects like tomcat use CLQ for object pools, combined w/ an
AtomicInteger for fast size() method. Neither queue make for proper pools,
nor unsynchronized size() is a nice option.
A few years back I thought that stacks can easily incorporate size on the
top of the head by keeping it along w/ the data element, thus having O(1)
sync. size w/o any extra hurdle.
Below is the code I've come up and it has been in production since. It makes
a great pool for direct ByteBuffers and some other memory heavy structures.
With proper sizing the hit ratio is usually over 99%.
http://pastebin.com/GW1afBpz The Code at pastebin
If you can share any possible problems with the implementation or the idea,
itself, it'd be great. Also I am partly interested why such stack never made
it into JSR166/JDK.
View this message in context: http://old.nabble.com/Concurrent-Bounded-Stack-tp33913940p33913940.html
Sent from the JSR166 Concurrency mailing list archive at Nabble.com.
More information about the Concurrency-interest