From 4b59b9cfa86b6b04b223561c0300c20d415134ae Mon Sep 17 00:00:00 2001 From: wyxloading Date: Tue, 28 Jul 2020 09:39:45 +0800 Subject: [PATCH] consoleEncoder: put cloned jsonEncoder back to pool (#851) consoleEncoder clone a jsonEncoder in `writeContext`, but never put back to pool after use. This make zap do more memory allocations, and may increase gc time. --- zapcore/console_encoder.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/zapcore/console_encoder.go b/zapcore/console_encoder.go index 54aae7ef9..767be1200 100644 --- a/zapcore/console_encoder.go +++ b/zapcore/console_encoder.go @@ -130,7 +130,10 @@ func (c consoleEncoder) EncodeEntry(ent Entry, fields []Field) (*buffer.Buffer, func (c consoleEncoder) writeContext(line *buffer.Buffer, extra []Field) { context := c.jsonEncoder.Clone().(*jsonEncoder) - defer context.buf.Free() + defer func() { + context.buf.Free() + putJSONEncoder(context) + }() addFields(context, extra) context.closeOpenNamespaces()