Drop buffers with under-used capacity in order to reduce memory waste

This commit is contained in:
Aliaksandr Valialkin
2016-06-23 15:09:07 +03:00
parent 164e50ac3f
commit 7e712dfeb6
+10 -3
View File
@@ -35,15 +35,22 @@ func (p *byteBufferPool) Acquire() *ByteBuffer {
func (p *byteBufferPool) Release(b *ByteBuffer) {
n := cap(b.B)
if n > maxSize {
// Just drop oversized buffers.
// Oversized buffer.
// Drop it.
return
}
if (n >> 2) > len(b.B) {
// Under-used buffer capacity.
// Drop it.
return
}
b.B = b.B[:0]
idx := bitsize(n-1) >> minBitSize
idx := bitSize(n-1) >> minBitSize
p.pools[idx].Put(b)
}
func bitsize(n int) int {
func bitSize(n int) int {
s := 0
for n > 0 {
n >>= 1