File tree Expand file tree Collapse file tree 1 file changed +19
-0
lines changed
paimon-common/src/main/java/org/apache/paimon/lookup/sort/db Expand file tree Collapse file tree 1 file changed +19
-0
lines changed Original file line number Diff line number Diff line change @@ -72,6 +72,21 @@ public class SimpleLsmKvDb implements Closeable {
7272 /** Maximum number of levels in the LSM tree. */
7373 static final int MAX_LEVELS = 4 ;
7474
75+ /**
76+ * Estimated per-entry memory overhead in the MemTable's TreeMap, beyond the raw key/value
77+ * bytes. This accounts for:
78+ *
79+ * <ul>
80+ * <li>TreeMap.Entry node: ~64 bytes (object header + left/right/parent/key/value refs +
81+ * color)
82+ * <li>MemorySlice wrapper: ~32 bytes (object header + segment ref + offset + length)
83+ * <li>MemorySegment backing the key: ~48 bytes (object header + heapMemory/offHeapBuffer refs
84+ * + address + size)
85+ * <li>byte[] value array header: ~16 bytes (object header + length)
86+ * </ul>
87+ */
88+ static final long PER_ENTRY_OVERHEAD = 160 ;
89+
7590 private final File dataDirectory ;
7691 private final SortLookupStoreFactory storeFactory ;
7792 private final Comparator <MemorySlice > keyComparator ;
@@ -180,6 +195,8 @@ public void put(byte[] key, byte[] value) throws IOException {
180195 long delta = key .length + value .length ;
181196 if (oldValue != null ) {
182197 delta -= (key .length + oldValue .length );
198+ } else {
199+ delta += PER_ENTRY_OVERHEAD ;
183200 }
184201 memTableSize += delta ;
185202 maybeFlushMemTable ();
@@ -197,6 +214,8 @@ public void delete(byte[] key) throws IOException {
197214 long delta = key .length ;
198215 if (oldValue != null ) {
199216 delta -= (key .length + oldValue .length );
217+ } else {
218+ delta += PER_ENTRY_OVERHEAD ;
200219 }
201220 memTableSize += delta ;
202221 maybeFlushMemTable ();
You can’t perform that action at this time.
0 commit comments