IoBuffer.normalizeCapacity improvement
--------------------------------------
Key: DIRMINA-751
URL: https://issues.apache.org/jira/browse/DIRMINA-751
Project: MINA
Issue Type: Improvement
Components: Core
Affects Versions: 2.0.0-RC1
Environment: N/A
Reporter: Bogdan Pistol
Priority: Minor
Fix For: 2.0.0-RC1
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.