mashudong created LUCENE-9673: --------------------------------- Summary: The level of IntBlockPool slice is always 1 Key: LUCENE-9673 URL: https://issues.apache.org/jira/browse/LUCENE-9673 Project: Lucene - Core Issue Type: Bug Components: core/other Reporter: mashudong
First slice is allocated by IntBlockPoo.newSlice(), and its level is 1, {code:java} private int newSlice(final int size) { if (intUpto > INT_BLOCK_SIZE-size) { nextBuffer(); assert assertSliceBuffer(buffer); } final int upto = intUpto; intUpto += size; buffer[intUpto-1] = 1; return upto; }{code} If one slice is not enough, IntBlockPoo.allocSlice() is called to allocate more slices, as the following code shows, level is 1, newLevel is NEXT_LEVEL_ARRAY[0] which is also 1. The result is the level of IntBlockPool slice is always 1, the first slice is 2 bytes long, and all subsequent slices are 4 bytes long. {code:java} private static final int[] NEXT_LEVEL_ARRAY = {1, 2, 3, 4, 5, 6, 7, 8, 9, 9}; private int allocSlice(final int[] slice, final int sliceOffset) { final int level = slice[sliceOffset]; final int newLevel = NEXT_LEVEL_ARRAY[level - 1]; final int newSize = LEVEL_SIZE_ARRAY[newLevel]; // Maybe allocate another block if (intUpto > INT_BLOCK_SIZE - newSize) { nextBuffer(); assert assertSliceBuffer(buffer); } final int newUpto = intUpto; final int offset = newUpto + intOffset; intUpto += newSize; // Write forwarding address at end of last slice: slice[sliceOffset] = offset; // Write new level: buffer[intUpto - 1] = newLevel; return newUpto; } {code} -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org