diff --git a/core/trino-main/src/main/java/io/trino/operator/MultiChannelGroupByHash.java b/core/trino-main/src/main/java/io/trino/operator/MultiChannelGroupByHash.java index 6c4f6e20d6c2..5c91eaaa8324 100644 --- a/core/trino-main/src/main/java/io/trino/operator/MultiChannelGroupByHash.java +++ b/core/trino-main/src/main/java/io/trino/operator/MultiChannelGroupByHash.java @@ -174,7 +174,8 @@ public long getEstimatedSize() currentPageBuilder.getRetainedSizeInBytes() + sizeOf(groupIdsByHash) + sizeOf(rawHashByHashPosition) + - preallocatedMemoryInBytes; + preallocatedMemoryInBytes + + (dictionaryLookBack != null ? dictionaryLookBack.getRetainedSizeInBytes() : 0); } @Override @@ -543,6 +544,7 @@ private int registerGroupId(HashGenerator hashGenerator, Page page, int position private static final class DictionaryLookBack { + private static final int INSTANCE_SIZE = toIntExact(ClassLayout.parseClass(DictionaryLookBack.class).instanceSize()); private final Block dictionary; private final int[] processed; @@ -572,6 +574,13 @@ public void setProcessed(int position, int groupId) { processed[position] = groupId; } + + public long getRetainedSizeInBytes() + { + return INSTANCE_SIZE + + sizeOf(processed) + + dictionary.getRetainedSizeInBytes(); + } } @VisibleForTesting