You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@lucene.apache.org by "mashudong (Jira)" <ji...@apache.org> on 2021/01/18 06:38:00 UTC

[jira] [Created] (LUCENE-9673) The level of IntBlockPool slice is always 1

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-unsubscribe@lucene.apache.org
For additional commands, e-mail: issues-help@lucene.apache.org