code: func NewBucketizedObjectPool(sizes []Bucket, opts ObjectPoolOptions) BucketizedObjectPool {
  	if opts == nil {
  		opts = NewObjectPoolOptions()
  	}
  
  	sizesAsc := make([]Bucket, len(sizes))
  	copy(sizesAsc, sizes)
  	sort.Sort(BucketByCapacity(sizesAsc))
  
  	var maxBucketCapacity int
  	if len(sizesAsc) != 0 {
  		maxBucketCapacity = sizesAsc[len(sizesAsc)-1].Capacity
  	}
  
  	iopts := opts.InstrumentOptions()
  
  	return &bucketizedObjectPool{
  		opts:              opts,
  		sizesAsc:          sizesAsc,
  		maxBucketCapacity: maxBucketCapacity,
  		maxAlloc:          iopts.MetricsScope().Counter("alloc-max"),
  	}
  }
docs: // NewBucketizedObjectPool creates a bucketized object pool