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