jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martijn Hendriks" <marti...@gx.nl>
Subject Can the caching mechanism be improved?
Date Fri, 02 Feb 2007 13:32:39 GMT
Hi all,

We've identified the method "getNonVirtualItemState" in the
SharedItemStateManager as a hot spot in our application. To avoid the
contention in "getNonVirtualItemState", we have pulled the isCached call
out of the synchronized block and re-implemented the MLRUItemStateCache.
It uses a HashMap that contains the ItemId-ItemState mapping and a
ReadWriteLock to replace all synchronized blocks in the code. The
implementation of "shrinkIfRequired" unfortunatly got much more
expensive as the entryset of the HashMap must be sorted by accesscount.
This method then clearly is a bottleneck. We solved this by changing the
CacheManager a bit: the "resizeAll" method avoids the eviction of items
out of caches as long as possible.

These changes work out really well for our application. I have attached
the changed files; comments/feedback are very welcome!


Martijn Hendriks
<GX> creative online development B.V.
t: 024 - 3888 261
f: 024 - 3888 621
e: martijnh@gx.nl
Wijchenseweg 111
6538 SW Nijmegen

  • Unnamed multipart/mixed (inline, None, 0 bytes)
View raw message