refine memory calculation
diff --git a/java/common/src/main/java/org/apache/tsfile/utils/BitMapArrayImpl.java b/java/common/src/main/java/org/apache/tsfile/utils/BitMapArrayImpl.java index b553061..9e8a409 100644 --- a/java/common/src/main/java/org/apache/tsfile/utils/BitMapArrayImpl.java +++ b/java/common/src/main/java/org/apache/tsfile/utils/BitMapArrayImpl.java
@@ -25,6 +25,12 @@ class BitMapArrayImpl extends BitMapImpl { + // Object header + BitMapImpl.size (int) + BitMapArrayImpl.bits (reference). + private static final long INSTANCE_SIZE = + RamUsageEstimator.alignObjectSize( + (long) RamUsageEstimator.NUM_BYTES_OBJECT_HEADER + + Integer.BYTES + + RamUsageEstimator.NUM_BYTES_OBJECT_REF); private static final byte[] BIT_UTIL = new byte[] {1, 2, 4, 8, 16, 32, 64, -128}; private static final byte[] UNMARK_BIT_UTIL = new byte[] { @@ -278,8 +284,8 @@ @Override long getRetainedSizeInBytes() { - return RamUsageEstimator.shallowSizeOfInstance(BitMapArrayImpl.class) - + RamUsageEstimator.alignObjectSize(RamUsageEstimator.NUM_BYTES_ARRAY_HEADER + bits.length); + // The byte array size includes its header, content, and object alignment. + return INSTANCE_SIZE + RamUsageEstimator.sizeOfByteArray(bits.length); } private void checkRange(int startPosition, int length) {
diff --git a/java/common/src/main/java/org/apache/tsfile/utils/BitMapLongImpl.java b/java/common/src/main/java/org/apache/tsfile/utils/BitMapLongImpl.java index 09dedcf..452c7f0 100644 --- a/java/common/src/main/java/org/apache/tsfile/utils/BitMapLongImpl.java +++ b/java/common/src/main/java/org/apache/tsfile/utils/BitMapLongImpl.java
@@ -24,6 +24,13 @@ class BitMapLongImpl extends BitMapImpl { private static final long ALL_BITS_MARKED = -1L; + // Object header + BitMapImpl.size (int) + bits (long) + paddingByte (byte). + private static final long INSTANCE_SIZE = + RamUsageEstimator.alignObjectSize( + (long) RamUsageEstimator.NUM_BYTES_OBJECT_HEADER + + Integer.BYTES + + Long.BYTES + + Byte.BYTES); private long bits; // BitMap serialization always has one extra byte, which does not fit in bits at size 64. @@ -205,7 +212,7 @@ @Override long getRetainedSizeInBytes() { - return RamUsageEstimator.shallowSizeOfInstance(BitMapLongImpl.class); + return INSTANCE_SIZE; } static long lowerBitsMask(int length) {
diff --git a/java/common/src/main/java/org/apache/tsfile/utils/RamUsageEstimator.java b/java/common/src/main/java/org/apache/tsfile/utils/RamUsageEstimator.java index 89e565c..e70a00f 100644 --- a/java/common/src/main/java/org/apache/tsfile/utils/RamUsageEstimator.java +++ b/java/common/src/main/java/org/apache/tsfile/utils/RamUsageEstimator.java
@@ -123,7 +123,6 @@ LOCAL_DATE_ARRAY_SIZE = RamUsageEstimator.shallowSizeOf(LocalDate[].class); LOCAL_DATE_SIZE = RamUsageEstimator.shallowSizeOf(LocalDate.class); - BIT_MAP_SIZE = RamUsageEstimator.shallowSizeOfInstance(BitMap.class); SIZE_OF_ARRAYLIST = RamUsageEstimator.shallowSizeOfInstance(ArrayList.class); } @@ -197,6 +196,8 @@ } ALIGN_MASK = NUM_BYTES_OBJECT_ALIGNMENT - 1; + // Object header + BitMap.implementation (reference). + BIT_MAP_SIZE = alignObjectSize((long) NUM_BYTES_OBJECT_HEADER + NUM_BYTES_OBJECT_REF); // get min/max value of cached Long class instances: long longCacheMinValue = 0;