[ https://issues.apache.org/jira/browse/DIRMINA-751?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Emmanuel Lecharny updated DIRMINA-751: -------------------------------------- Fix Version/s: (was: 2.0.0-RC2) 2.0.0 > 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 > > Attachments: IoBufferTest.java, IoBufferTest.java, IoBufferTest.java, > patch-lookup-tables.txt, 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.