You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by gu...@apache.org on 2022/01/26 10:06:42 UTC
[lucene] branch branch_9x updated: LUCENE-10388: Remove MultiLevelSkipListReader#SkipBuffer (#620)
This is an automated email from the ASF dual-hosted git repository.
guofeng pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/lucene.git
The following commit(s) were added to refs/heads/branch_9x by this push:
new c0a2471 LUCENE-10388: Remove MultiLevelSkipListReader#SkipBuffer (#620)
c0a2471 is described below
commit c0a247144ab7ee38e2050bf68c76c67662d4951c
Author: gf2121 <52...@users.noreply.github.com>
AuthorDate: Wed Jan 26 18:06:34 2022 +0800
LUCENE-10388: Remove MultiLevelSkipListReader#SkipBuffer (#620)
---
lucene/CHANGES.txt | 2 +
.../lucene/codecs/MultiLevelSkipListReader.java | 76 ++--------------------
2 files changed, 7 insertions(+), 71 deletions(-)
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 375b815..3e697af 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -133,6 +133,8 @@ Optimizations
* LUCENE-10375: Speed up HNSW vectors merge by first writing combined vector
data to a file. (Julie Tibshirani, Adrien Grand)
+* LUCENE-10388: Remove MultiLevelSkipListReader#SkipBuffer to make JVM less confused. (Guo Feng)
+
Changes in runtime behavior
---------------------
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListReader.java b/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListReader.java
index d454240..e4c59f4 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListReader.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListReader.java
@@ -42,15 +42,6 @@ public abstract class MultiLevelSkipListReader implements Closeable {
/** number of levels in this skip list */
protected int numberOfSkipLevels;
- // Expert: defines the number of top skip levels to buffer in memory.
- // Reducing this number results in less memory usage, but possibly
- // slower performance due to more random I/Os.
- // Please notice that the space each level occupies is limited by
- // the skipInterval. The top level can not contain more than
- // skipLevel entries, the second top level can not contain more
- // than skipLevel^2 entries and so forth.
- private int numberOfLevelsToBuffer = 1;
-
private int docCount;
/** skipStream for each level. */
@@ -219,25 +210,18 @@ public abstract class MultiLevelSkipListReader implements Closeable {
skipStream[0].seek(skipPointer[0]);
- int toBuffer = numberOfLevelsToBuffer;
-
for (int i = numberOfSkipLevels - 1; i > 0; i--) {
// the length of the current level
long length = readLevelLength(skipStream[0]);
// the start pointer of the current level
skipPointer[i] = skipStream[0].getFilePointer();
- if (toBuffer > 0) {
- // buffer this level
- skipStream[i] = new SkipBuffer(skipStream[0], (int) length);
- toBuffer--;
- } else {
- // clone this stream, it is already at the start of the current level
- skipStream[i] = skipStream[0].clone();
- // move base stream beyond the current level
- skipStream[0].seek(skipStream[0].getFilePointer() + length);
- }
+ // clone this stream, it is already at the start of the current level
+ skipStream[i] = skipStream[0].clone();
+
+ // move base stream beyond the current level
+ skipStream[0].seek(skipStream[0].getFilePointer() + length);
}
// use base stream for the lowest level
@@ -279,54 +263,4 @@ public abstract class MultiLevelSkipListReader implements Closeable {
lastDoc = skipDoc[level];
lastChildPointer = childPointer[level];
}
-
- /** used to buffer the top skip levels */
- private static final class SkipBuffer extends IndexInput {
- private byte[] data;
- private long pointer;
- private int pos;
-
- SkipBuffer(IndexInput input, int length) throws IOException {
- super("SkipBuffer on " + input);
- data = new byte[length];
- pointer = input.getFilePointer();
- input.readBytes(data, 0, length);
- }
-
- @Override
- public void close() {
- data = null;
- }
-
- @Override
- public long getFilePointer() {
- return pointer + pos;
- }
-
- @Override
- public long length() {
- return data.length;
- }
-
- @Override
- public byte readByte() {
- return data[pos++];
- }
-
- @Override
- public void readBytes(byte[] b, int offset, int len) {
- System.arraycopy(data, pos, b, offset, len);
- pos += len;
- }
-
- @Override
- public void seek(long pos) {
- this.pos = (int) (pos - pointer);
- }
-
- @Override
- public IndexInput slice(String sliceDescription, long offset, long length) throws IOException {
- throw new UnsupportedOperationException();
- }
- }
}