Good point. I'm looking at a way to use aspects during unit testing to automatically detect if objects are allocated. This will help prevent regressions once the no-GC goal has been achieved.
On Sat, Feb 20, 2016 at 2:03 AM, Gary Gregory <[email protected]> wrote: > I think that all these perf changes need a method comment that says > something like "note that this code carefully does this and not that for > performance". > > It should all be doc'd otherwise it is too easy for someone else to edit > the method and undo the intent of the carefully tweaked perf changes. > > Gary > ---------- Forwarded message ---------- > From: <[email protected]> > Date: Feb 19, 2016 7:41 AM > Subject: logging-log4j2 git commit: LOG4J2-1281 > LoggerConfig.getProperties() should not allocate on each call. > To: <[email protected]> > Cc: > > Repository: logging-log4j2 > Updated Branches: > refs/heads/master 25a780e95 -> 3458ea944 > > > LOG4J2-1281 LoggerConfig.getProperties() should not allocate on each call. > > > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo > Commit: > http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/3458ea94 > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/3458ea94 > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/3458ea94 > > Branch: refs/heads/master > Commit: 3458ea94491c01a4ce91bcf5bb249c80306fa42c > Parents: 25a780e > Author: rpopma <[email protected]> > Authored: Sat Feb 20 00:41:24 2016 +0900 > Committer: rpopma <[email protected]> > Committed: Sat Feb 20 00:41:24 2016 +0900 > > ---------------------------------------------------------------------- > .../org/apache/logging/log4j/core/config/LoggerConfig.java | 7 ++++--- > src/changes/changes.xml | 3 +++ > 2 files changed, 7 insertions(+), 3 deletions(-) > ---------------------------------------------------------------------- > > > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3458ea94/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java > ---------------------------------------------------------------------- > diff --git > a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java > b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java > index 2bd25be..1d0f530 100644 > --- > a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java > +++ > b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java > @@ -127,11 +127,12 @@ public class LoggerConfig extends AbstractFilterable > { > this.includeLocation = includeLocation; > this.config = config; > if (properties != null && properties.length > 0) { > - this.properties = new HashMap<>(properties.length); > + final Map<Property, Boolean> map = new > HashMap<>(properties.length); > for (final Property prop : properties) { > final boolean interpolate = > prop.getValue().contains("${"); > - this.properties.put(prop, interpolate); > + map.put(prop, interpolate); > } > + this.properties = Collections.unmodifiableMap(map); > } else { > this.properties = null; > } > @@ -308,7 +309,7 @@ public class LoggerConfig extends AbstractFilterable { > */ > // LOG4J2-157 > public Map<Property, Boolean> getProperties() { > - return properties == null ? null : > Collections.unmodifiableMap(properties); > + return properties; > } > > /** > > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3458ea94/src/changes/changes.xml > ---------------------------------------------------------------------- > diff --git a/src/changes/changes.xml b/src/changes/changes.xml > index e579ed4..a006907 100644 > --- a/src/changes/changes.xml > +++ b/src/changes/changes.xml > @@ -24,6 +24,9 @@ > </properties> > <body> > <release version="2.6" date="201Y-MM-DD" description="GA Release 2.6"> > + <action issue="LOG4J2-1281" dev="rpopma" type="fix"> > + LoggerConfig.getProperties() should not allocate on each call. > + </action> > <action issue="LOG4J2-1280" dev="rpopma" type="fix"> > Logger methods taking Supplier parameters now correctly handle > cases where the supplied value is a Message. > </action> > >
