You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Rob Godfrey (JIRA)" <qp...@incubator.apache.org> on 2007/02/15 17:20:06 UTC

[jira] Assigned: (QPID-320) [Performance] Improve performance by remembering protocol version

     [ https://issues.apache.org/jira/browse/QPID-320?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Rob Godfrey reassigned QPID-320:
--------------------------------

    Assignee: Rob Godfrey

> [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
>         Assigned To: Rob Godfrey
>            Priority: Minor
>             Fix For: M2
>
>         Attachments: QPID-320.patch
>
>
> 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.