Currently we have no clear guidance on when String or AMQShortString should be used. As a result things like queue recovery during start up does a large number of new AMQShortString() then toString() then new AMQShortString() as the value is passed through the various constructors.
For an example follow what happens to 'owner' in the queue recovery path from loadQueues in DerbyMessageStore.
We should ensure we minimise the transformations that we are doing.
Whilst this is not on the message delivery path the numerous transformations that owner goes through is probably not an isolated occurrence.