Segment(NativeBytes bytes) {
      this.bytes = bytes;

      long start = bytes.startAddr() + SharedHashMapBuilder.SEGMENT_HEADER;
      final NativeBytes iimmapBytes = new NativeBytes(null, start, start + sizeOfMultiMap(), null);
      iimmapBytes.load();
      hashLookup = new IntIntMultiMap(iimmapBytes);
      start += sizeOfMultiMap();
      final NativeBytes bsBytes =
          new NativeBytes(tmpBytes.bytesMarshallerFactory(), start, start + sizeOfBitSets(), null);
      freeList = new SingleThreadedDirectBitSet(bsBytes);
      start += numberOfBitSets() * sizeOfBitSets();
      entriesOffset = start - bytes.startAddr();
      assert bytes.capacity() >= entriesOffset + entriesPerSegment * entrySize;
    }
 public Segment(NativeBytes bytes) {
   this.bytes = bytes;
   long start = bytes.startAddr() + SharedHashMapBuilder.SEGMENT_HEADER;
   long size = Maths.nextPower2(builder.entriesPerSegment() * 12, 16 * 8);
   NativeBytes iimmapBytes =
       new NativeBytes(tmpBytes.bytesMarshallerFactory(), start, start + size, null);
   iimmapBytes.load();
   hashLookup = new IntIntMultiMap(iimmapBytes);
   start += size;
   long bsSize = (builder.entriesPerSegment() + 63) / 64 * 8;
   NativeBytes bsBytes =
       new NativeBytes(tmpBytes.bytesMarshallerFactory(), start, start + bsSize, null);
   //            bsBytes.load();
   freeList = new SingleThreadedDirectBitSet(bsBytes);
   start += bsSize * (1 + builder.replicas());
   entriesOffset = start - bytes.startAddr();
   assert bytes.capacity() >= entriesOffset + builder.entriesPerSegment() * builder.entrySize();
 }