This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch TuneBinaryColumnMemory
in repository https://gitbox.apache.org/repos/asf/tsfile.git

commit beace6cbd2525336afd179a1c72d0b0f6b272f1c
Author: JackieTien97 <[email protected]>
AuthorDate: Tue Jan 21 10:36:09 2025 +0800

    Optimize retained memory size calculation for getRegion method of 
BinaryColumn
---
 .../read/common/block/column/BinaryColumn.java     | 31 +++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/BinaryColumn.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/BinaryColumn.java
index 9b8a82cc4..0100b0c65 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/BinaryColumn.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/BinaryColumn.java
@@ -78,6 +78,34 @@ public class BinaryColumn implements Column {
     retainedSizeInBytes = INSTANCE_SIZE + sizeOfBooleanArray(positionCount) + 
sizeOf(values);
   }
 
+  // called by getRegion which already knows the underlying retainedSizeInBytes
+  private BinaryColumn(
+      int arrayOffset,
+      int positionCount,
+      boolean[] valueIsNull,
+      Binary[] values,
+      long retainedSizeInBytes) {
+    if (arrayOffset < 0) {
+      throw new IllegalArgumentException("arrayOffset is negative");
+    }
+    this.arrayOffset = arrayOffset;
+    if (positionCount < 0) {
+      throw new IllegalArgumentException("positionCount is negative");
+    }
+    this.positionCount = positionCount;
+
+    if (values.length - arrayOffset < positionCount) {
+      throw new IllegalArgumentException("values length is less than 
positionCount");
+    }
+    this.values = values;
+
+    if (valueIsNull != null && valueIsNull.length - arrayOffset < 
positionCount) {
+      throw new IllegalArgumentException("isNull length is less than 
positionCount");
+    }
+    this.valueIsNull = valueIsNull;
+    this.retainedSizeInBytes = retainedSizeInBytes;
+  }
+
   @Override
   public TSDataType getDataType() {
     return TSDataType.TEXT;
@@ -141,7 +169,8 @@ public class BinaryColumn implements Column {
   @Override
   public Column getRegion(int positionOffset, int length) {
     checkValidRegion(getPositionCount(), positionOffset, length);
-    return new BinaryColumn(positionOffset + arrayOffset, length, valueIsNull, 
values);
+    return new BinaryColumn(
+        positionOffset + arrayOffset, length, valueIsNull, values, 
getRetainedSizeInBytes());
   }
 
   @Override

Reply via email to