My comments below:
On 20 May 2008, at 22:57, Mircea Markus wrote:
Hi,
There is place for some performance optimization with respect to the
notification mechanism, in the Notifier class:
1) there are defensive Maps being created for being passed in the
pre/post notifications, even if no listeners are registered.
Are you looking at trunk? I can see that the defensive copy is only
made *after* checking for whether a listener exists.
E.g., in notifyNodeModified():
if (listeners != null && !listeners.isEmpty())
{
boolean originLocal = ctx.isOriginLocal();
Map dataCopy = copy(data, useMarshalledValueMaps);
... etc ...
}
2) even if we do not have listeners for a certain event, there is
still a lookup in the listeners map to check for the available list
of listeners
Yes, you mean, for example,
List<ListenerInvocation> listeners =
listenerInvocations.get(NodeModified.class);
in notifyNodeModified().
Since we have a finite set of callbacks, I don't mind these lists
becoming members as you suggested. The only thing is, they should be
final and never null, since they need to be threadsafe. Constructing
them lazily will become a problem without synchronizations.
Optimizations:
for 1) - do not trigger a notification if no listener registered,
use a guard - similar to log.isTraceEnabled()
for 2) - rather than keeping a map with listeners registered for
each annotation type, rather keep the listeners list as a member -
this way we'll skip the list lookup.
Another thing that just come into my mind is not iterating on the
list of listeners but rather use sequential access - small gain
though.
Well - looking at the implementation of a CopyOnWriteArrayList's
iterator, it is nothing but sequential access. The only gain would be
saving the construction of the iterator object and in wrapping array
accesses in a method (iterator.next()). For the sake of readability
though I'd rather stick with the foreach loop.
I expect this would gain us some performance, especially in the
standalone mode.
WDYT?
Cheers,
Mircea
_______________________________________________
jbosscache-dev mailing list
jbosscache-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jbosscache-dev
--
Manik Surtani
Lead, JBoss Cache
manik(a)jboss.org