diff --git a/encode.go b/encode.go index b6d9aed3..cd3e11aa 100644 --- a/encode.go +++ b/encode.go @@ -21,9 +21,7 @@ import ( "reflect" "time" "unsafe" -) -import ( perrors "github.com/pkg/errors" ) @@ -56,6 +54,22 @@ func (e *Encoder) Clean() { e.refMap = make(map[unsafe.Pointer]_refElem, 7) } +// ReuseBufferClean reuse the Encoder for a new object encoding. +// it reuse allocated buffer and reduce memory-allocation. +func (e *Encoder) ReuseBufferClean() { + var buffer []byte + if cap(e.buffer) <= 512 { + // reuse buffer, avoid allocate + buffer = e.buffer[:0] + } else { + // avoiding memory leak caused by growth of underlying array + buffer = make([]byte, 64) + } + e.classInfoList = nil + e.buffer = buffer[:0] + e.refMap = make(map[unsafe.Pointer]_refElem, 7) +} + // Buffer returns byte buffer func (e *Encoder) Buffer() []byte { return e.buffer[:]