JBoss development,
A new message was posted in the thread "Profiling the dependency project":
http://community.jboss.org/message/527291#527291
Author : David Lloyd
Profile :
http://community.jboss.org/people/david.lloyd@jboss.com
Message:
--------------------------------------------------------------
alesj wrote:
> Since installCallbacks and uninstallCallbacks are ConcurrentHashMaps, I think the
read lock is unnecessary here in AbstractController:
Since I think callbacks are already used in some explicitly locked code (via Lock),
what about if we leave the locks and just change the callbacks to plain HashMap?
Like discussed on the call, what is faster in a really-rare-concurrent env?
* lock + plain hash collection
* concurrent hash collection
Jason, DML?
Well, if you're already locking, concurrent hash maps will generally give you general
throughput in the contended case; if there's only one contender then there's only
one lock acquisition so it's a wash, on paper. In reality, a CHM is actually a bit
more complex, and it's also a really big structure (even if it's empty),
consisting of a ReentrantLock for each lock stripe, each of which includes a bunch of
stuff, so you get another kind of savings by using a simple synchronized map. In fact
I'm hesitant to ever use CHM just because of its excessive size, especially if
you're creating a lot of them (if you ever do a memory profile of AS, you can see that
CHM and its components tend to bubble to the top of the list). So for low contention
situations I'd always recommend a plain synchronized map.
The best solution would of course be to eliminate the lock - if you're already
protected, you could use a plain hashmap. Otherwise consider if copy-on-write is suitable
for you - Jason's FastCopyHashMap is good for that kind of thing.
--------------------------------------------------------------
To reply to this message visit the message page:
http://community.jboss.org/message/527291#527291