Commit e54e02fd by aquilescanta Committed by tonihei

Pre-allocate availableAllocations to prevent a re-size in release

PiperOrigin-RevId: 418022431
parent 8b119027
...@@ -102,6 +102,12 @@ public final class DefaultAllocator implements Allocator { ...@@ -102,6 +102,12 @@ public final class DefaultAllocator implements Allocator {
availableAllocations[availableCount] = null; availableAllocations[availableCount] = null;
} else { } else {
allocation = new Allocation(new byte[individualAllocationSize], 0); allocation = new Allocation(new byte[individualAllocationSize], 0);
if (allocatedCount > availableAllocations.length) {
// Make availableAllocations be large enough to contain all allocations made by this
// allocator so that release() does not need to grow the availableAllocations array. See
// [Internal ref: b/209801945].
availableAllocations = Arrays.copyOf(availableAllocations, availableAllocations.length * 2);
}
} }
return allocation; return allocation;
} }
...@@ -114,12 +120,6 @@ public final class DefaultAllocator implements Allocator { ...@@ -114,12 +120,6 @@ public final class DefaultAllocator implements Allocator {
@Override @Override
public synchronized void release(Allocation[] allocations) { public synchronized void release(Allocation[] allocations) {
if (availableCount + allocations.length >= availableAllocations.length) {
availableAllocations =
Arrays.copyOf(
availableAllocations,
max(availableAllocations.length * 2, availableCount + allocations.length));
}
for (Allocation allocation : allocations) { for (Allocation allocation : allocations) {
availableAllocations[availableCount++] = allocation; availableAllocations[availableCount++] = allocation;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment