[ https://issues.apache.org/jira/browse/DIRMINA751?page=com.atlassian.jira.plugin.system.issuetabpanels:commenttabpanel&focusedCommentId=12787203#action_12787203
]
Bogdan Pistol commented on DIRMINA751:

Emmanuel you're right, I did not know about Integer.highestOneBit(), it is very nice and fast
:)
You can even do this in 2 lines (and keep the performance):
protected static int normalizeCapacity( int requestedCapacity ) {
int newCapacity = Integer.highestOneBit(requestedCapacity  1) << 1;
return newCapacity < 0 ? Integer.MAX_VALUE : newCapacity;
}
Christopher, I tested your method and indeed it returns around 2 seconds on my laptop too.
> IoBuffer.normalizeCapacity improvement
> 
>
> Key: DIRMINA751
> URL: https://issues.apache.org/jira/browse/DIRMINA751
> Project: MINA
> Issue Type: Improvement
> Components: Core
> Affects Versions: 2.0.0RC1
> Environment: N/A
> Reporter: Bogdan Pistol
> Priority: Minor
> Fix For: 2.0.0RC1
>
> Attachments: IoBufferTest.java, patch.txt
>
>
> The technique of computing the minimum power of 2 that is bigger than the requestedCapacity
in the org.apache.mina.core.buffer.IoBuffer.normalizeCapacity() is not optimal.
> The current computation is as follows:
> int newCapacity = 1;
> while ( newCapacity < requestedCapacity ) {
> newCapacity <<= 1;
> if ( newCapacity < 0 ) {
> return Integer.MAX_VALUE;
> }
> }
> The time complexity of this is O(n), where n is the number of bits of the requestedCapacity
integer, that is log2(requestedCapacity)  maximum 31.
> This creates an unnecessary overhead in some high IoBuffer allocations scenarios that
are calling IoBuffer.normalizeCapacity() a lot when creating IoBuffers. I observed this when
benchmarking a MINA server with hprof.
> There is a better solution to this problem than to iterate the bits from 0 to log2(requestedCapacity).
> The alternative is to use a binary search technique that has optimal time complexity
of O(5). Because requestedCapacity is an integer and has a maximum of 2^5 (32) bits we can
binary search in the set of bits and determine in O(5) comparisons the minimum power of 2
that is bigger than the requestedCapacity.

This message is automatically generated by JIRA.

You can reply to this email to add a comment to the issue online.
