From 4b59b9cfa86b6b04b223561c0300c20d415134ae Mon Sep 17 00:00:00 2001 From: wyxloading Date: Tue, 28 Jul 2020 09:39:45 +0800 Subject: [PATCH 1/2] 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() From 48ec7aa059f13dad323bbe5962f13d8eb55c633a Mon Sep 17 00:00:00 2001 From: wyxloading Date: Wed, 29 Jul 2020 16:58:28 +0800 Subject: [PATCH 2/2] chore: add comments Co-authored-by: Prashant Varanasi --- zapcore/console_encoder.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/zapcore/console_encoder.go b/zapcore/console_encoder.go index 767be1200..6c6080366 100644 --- a/zapcore/console_encoder.go +++ b/zapcore/console_encoder.go @@ -131,6 +131,8 @@ 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 func() { + // putJSONEncoder assumes the buffer is still used, but we write out the buffer so + // we can free it. context.buf.Free() putJSONEncoder(context) }()