[Performance] Improve performance by remembering protocol version
-----------------------------------------------------------------

                 Key: QPID-320
                 URL: https://issues.apache.org/jira/browse/QPID-320
             Project: Qpid
          Issue Type: Improvement
          Components: Java Broker, Java Common
            Reporter: Rob Godfrey
            Priority: Minor


Currently all methods are looked up using the protocol version every time they 
are received.  However once the version is negotiated, the protocol version for 
a session cannot change.  

Therefore we can attach a version specific method registry to the session which 
does not need to look up the methods by protocol version only by method / class 
id.

Other performance tweaks included in the soon to follow patch:

1) Cache low numbered channels in array

Currently channels are always looked up in a hash map indexed by an int.  In 
most cases, only low numbered channels will be used, so we can use an array to 
store these and do a lookup here, instead of incurring the cost of auto-boxing 
and then hashMap lookup.  Given that this is called at least once (and often 
more times) on each message received, the small saving is worthwhile.

2) Reducing autoboxing around messageIds

messageIds are longs, however they are most often used as the keys to Maps, 
causing a great deal of boxing/unboxing.  To reduce unnecessary object 
creation, pass around the Long object messageId rather than the primitive.

3) Keep track of queue depth

Queue depth is currently calculated by iterating over the messages and summing 
their size.  This is done at every message add.  Instead, simply keep a running 
tally of message size.

4) Use singleton / singletonList where we know there will only be one element

5) Use EnumMap where key is a enum.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to