@Override public long getEstimatedSize() { return INSTANCE_SIZE + size + typedHistograms.sizeOf(); }
@Override public void ensureCapacity(long size) { digests.ensureCapacity(size); percentilesArray.ensureCapacity(size); }
public LegacyArrayAggregationGroupState(Type type) { this.type = type; this.blockBuilders = new ObjectBigArray<>(); this.size = 0; }
private ObjectBigArray<Row> nextGroupedRows() { if (currentGroupNumber < groupCount) { RowHeap rows = groupedRows.get(currentGroupNumber); verify(rows != null && !rows.isEmpty(), "impossible to have inserted a group without a witness row"); groupedRows.set(currentGroupNumber, null); currentGroupSizeInBytes = rows.getEstimatedSizeInBytes(); currentGroupNumber++; currentGroupSize = rows.size(); // sort output rows in a big array in case there are too many rows ObjectBigArray<Row> sortedRows = new ObjectBigArray<>(); sortedRows.ensureCapacity(currentGroupSize); int index = currentGroupSize - 1; while (!rows.isEmpty()) { sortedRows.set(index, rows.dequeue()); index--; } return sortedRows; } return null; } }
long actualSizeInBytes) ObjectBigArray<Object> pageReferences = new ObjectBigArray<>(); pageReferences.ensureCapacity(pagePositions.size()); long pageReferencesSizeInBytes = pageReferences.sizeOf(); ObjectBigArray<Object> groupedRows = new ObjectBigArray<>(); groupedRows.ensureCapacity(rowCounts.size()); long groupedRowsSizeInBytes = groupedRows.sizeOf();
@Override public SetDigest getDigest() { return digests.get(groupId); }
@Override public void setDigest(QuantileDigest digest) { digests.set(getGroupId(), requireNonNull(digest, "digest is null")); }
@Test public void testRetainedSizeWithOverlappingBlocks() { int entries = 123; BlockBuilder blockBuilder = new IntArrayBlockBuilder(null, entries); for (int i = 0; i < entries; i++) { blockBuilder.writeInt(i); } Block block = blockBuilder.build(); // Verify we do not over count int arraySize = 456; int blocks = 7890; BlockBigArray blockBigArray = new BlockBigArray(); blockBigArray.ensureCapacity(arraySize); for (int i = 0; i < blocks; i++) { blockBigArray.set(i % arraySize, block.getRegion(0, entries)); } ReferenceCountMap referenceCountMap = new ReferenceCountMap(); referenceCountMap.incrementAndGet(block); long expectedSize = ClassLayout.parseClass(BlockBigArray.class).instanceSize() + referenceCountMap.sizeOf() + (new ObjectBigArray()).sizeOf() + block.getRetainedSizeInBytes() + (arraySize - 1) * ClassLayout.parseClass(block.getClass()).instanceSize(); assertEquals(blockBigArray.sizeOf(), expectedSize); } }
public ObjectBigArray(Object initialValue) { this.initialValue = initialValue; array = new Object[INITIAL_SEGMENTS][]; allocateNewSegment(); }
private ObjectBigArray<Row> nextGroupedRows() { if (currentGroupNumber < groupCount) { RowHeap rows = groupedRows.get(currentGroupNumber); verify(rows != null && !rows.isEmpty(), "impossible to have inserted a group without a witness row"); groupedRows.set(currentGroupNumber, null); currentGroupSizeInBytes = rows.getEstimatedSizeInBytes(); currentGroupNumber++; currentGroupSize = rows.size(); // sort output rows in a big array in case there are too many rows ObjectBigArray<Row> sortedRows = new ObjectBigArray<>(); sortedRows.ensureCapacity(currentGroupSize); int index = currentGroupSize - 1; while (!rows.isEmpty()) { sortedRows.set(index, rows.dequeue()); index--; } return sortedRows; } return null; } }
long actualSizeInBytes) ObjectBigArray<Object> pageReferences = new ObjectBigArray<>(); pageReferences.ensureCapacity(pagePositions.size()); long pageReferencesSizeInBytes = pageReferences.sizeOf(); ObjectBigArray<Object> groupedRows = new ObjectBigArray<>(); groupedRows.ensureCapacity(rowCounts.size()); long groupedRowsSizeInBytes = groupedRows.sizeOf();
/** * Returns the element of this big array at specified index. * * @param index a position in this big array. * @return the element of this big array at the specified position. */ public Slice get(long index) { return array.get(index); }
@Override public void setHyperLogLog(HyperLogLog value) { requireNonNull(value, "value is null"); hlls.set(getGroupId(), value); }
@Test public void testRetainedSizeWithOverlappingBlocks() { int entries = 123; BlockBuilder blockBuilder = new IntArrayBlockBuilder(null, entries); for (int i = 0; i < entries; i++) { blockBuilder.writeInt(i); } Block block = blockBuilder.build(); // Verify we do not over count int arraySize = 456; int blocks = 7890; BlockBigArray blockBigArray = new BlockBigArray(); blockBigArray.ensureCapacity(arraySize); for (int i = 0; i < blocks; i++) { blockBigArray.set(i % arraySize, block.getRegion(0, entries)); } ReferenceCountMap referenceCountMap = new ReferenceCountMap(); referenceCountMap.incrementAndGet(block); long expectedSize = ClassLayout.parseClass(BlockBigArray.class).instanceSize() + referenceCountMap.sizeOf() + (new ObjectBigArray()).sizeOf() + block.getRetainedSizeInBytes() + (arraySize - 1) * ClassLayout.parseClass(block.getClass()).instanceSize(); assertEquals(blockBigArray.sizeOf(), expectedSize); } }
public ObjectBigArray(Object initialValue) { this.initialValue = initialValue; array = new Object[INITIAL_SEGMENTS][]; allocateNewSegment(); }
ObjectBigArray<BlockBuilder> valueArrayBlockBuilders = new ObjectBigArray<>(); valueArrayBlockBuilders.ensureCapacity(state.getEntryCount()); BlockBuilder distinctKeyBlockBuilder = keyType.createBlockBuilder(null, state.getEntryCount(), expectedValueSize(keyType, 100)); TypedSet keySet = new TypedSet(keyType, state.getEntryCount(), MultimapAggregationFunction.NAME); keyType.appendTo(key, keyValueIndex, distinctKeyBlockBuilder); BlockBuilder valueArrayBuilder = valueType.createBlockBuilder(null, 10, expectedValueSize(valueType, EXPECTED_ENTRY_SIZE)); valueArrayBlockBuilders.set(keySet.positionOf(key, keyValueIndex), valueArrayBuilder); valueType.appendTo(value, keyValueIndex, valueArrayBlockBuilders.get(keySet.positionOf(key, keyValueIndex))); }); for (int i = 0; i < distinctKeyBlockBuilder.getPositionCount(); i++) { keyType.appendTo(distinctKeyBlockBuilder, i, multimapBlockBuilder); valueArrayType.writeObject(multimapBlockBuilder, valueArrayBlockBuilders.get(i).build());
@Override public long getEstimatedSize() { return INSTANCE_SIZE + size + blockBuilders.sizeOf(); }
@Override public void ensureCapacity(long size) { heaps.ensureCapacity(size); }