The rationale for existing data structures was that a small number of recyclable big arrays would be better than many per-segment collections. I guess it's hard to predict as it depends on queries/data. Would it be worth undertaking some benchmarking or are you happy that this is indeed the best route? I deliberately kept RecordingBucketCollector separate from DeferringBucketCollector to allow for alternative data structures to be employed.