FixedAllocator(final RWStore store,final int size){
  m_diskAddr=0;
  m_store=store;
  m_size=size;
  m_bitSize=calcBitSize(true,size,cMinAllocation,cModAllocation);
  allocBlockRange=32 * m_bitSize;
  final int numBlocks=254 / (m_bitSize + 1);
  m_allocBlocks=new ArrayList<AllocBlock>(numBlocks);
  for (int i=0; i < numBlocks; i++) {
    m_allocBlocks.add(new AllocBlock(0,m_bitSize,this));
  }
  m_freeTransients=0;
  m_freeBits=32 * m_bitSize * numBlocks;
}

FixedAllocator ( final RWStore store , final int size ) { m_diskAddr = 0 ; m_store = store ; m_size = size ; m_bitSize = calcBitSize ( true , size , cMinAllocation , cModAllocation ) ; allocBlockRange = 32 * m_bitSize ; final int numBlocks = 254 / ( m_bitSize + 1 ) ; m_allocBlocks = new ArrayList < AllocBlock > ( numBlocks ) ; for ( int i = 0 ; i < numBlocks ; i ++ ) { m_allocBlocks . add ( new AllocBlock ( 0 , m_bitSize , this ) ) ; } m_freeTransients = 0 ; m_freeBits = 32 * m_bitSize * numBlocks ; }
calculating the number of ints ( m_bitsize ) cannot rely on a power of 2 . previously this assumption was sufficient to guarantee a rounding on to an 64k boundary . however , now nints * 32 * 64 = 64k , so need multiple of 32 ints . < p > so , whatever multiple of 64 , if we allocate a multiple of 32 ints we are guaranteed to be on an 64k boundary . < p > this does mean that for the largest blocks of ~ 256k , we are allocating 256mb of space
