From 297155bc902ed4e562d68307e342d4f99a2a9c82 Mon Sep 17 00:00:00 2001 From: Evgenia Badyanova Date: Fri, 22 Feb 2019 15:05:08 -0500 Subject: [PATCH] Reduce garbage from allocations in deprecation logger (#38780) 1. Setting length for formatWarning String to avoid AbstractStringBuilder.ensureCapacityInternal calls 2. Adding extra check for parameter array length == 0 to avoid unnecessarily creating StringBuilder in LoggerMessageFormat.format Helps to narrow the performance gap in throughout for geonames benchmark (#37411) by 3%. For more details: https://github.com/elastic/elasticsearch/issues/37530#issuecomment-462758384 Relates to #37530 Relates to #37411 Relates to #35754 --- .../org/elasticsearch/common/logging/DeprecationLogger.java | 6 +++++- .../elasticsearch/common/logging/LoggerMessageFormat.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/common/logging/DeprecationLogger.java b/server/src/main/java/org/elasticsearch/common/logging/DeprecationLogger.java index 81d272923db22..d5d682f807ae3 100644 --- a/server/src/main/java/org/elasticsearch/common/logging/DeprecationLogger.java +++ b/server/src/main/java/org/elasticsearch/common/logging/DeprecationLogger.java @@ -259,7 +259,11 @@ public Void run() { * @return a warning value formatted according to RFC 7234 */ public static String formatWarning(final String s) { - return WARNING_PREFIX + " " + "\"" + escapeAndEncode(s) + "\""; + // Assume that the common scenario won't have a string to escape and encode. + int length = WARNING_PREFIX.length() + s.length() + 3; + final StringBuilder sb = new StringBuilder(length); + sb.append(WARNING_PREFIX).append(" \"").append(escapeAndEncode(s)).append("\""); + return sb.toString(); } /** diff --git a/server/src/main/java/org/elasticsearch/common/logging/LoggerMessageFormat.java b/server/src/main/java/org/elasticsearch/common/logging/LoggerMessageFormat.java index 3b85a42ce96e4..17553e9177799 100644 --- a/server/src/main/java/org/elasticsearch/common/logging/LoggerMessageFormat.java +++ b/server/src/main/java/org/elasticsearch/common/logging/LoggerMessageFormat.java @@ -40,7 +40,7 @@ public static String format(final String prefix, final String messagePattern, fi if (messagePattern == null) { return null; } - if (argArray == null) { + if (argArray == null || argArray.length == 0) { if (prefix == null) { return messagePattern; } else {