You can be the Hemingway of Java code! ;-) On Sun, Feb 21, 2016 at 6:04 PM, Gary Gregory <[email protected]> wrote:
> Well, yeah, sure, as long as it makes sense... > > > On Sun, Feb 21, 2016 at 6:01 PM, Remko Popma <[email protected]> > wrote: > >> You actually end up with really clean code where each method does only >> one thing. Single responsibility principle etc. >> Clean code is fast! >> >> On Mon, Feb 22, 2016 at 10:58 AM, Gary Gregory <[email protected]> >> wrote: >> >>> The 35 bytecodes or less limit seems arbitrary. What about IBM JVMs? >>> Other vendors'? >>> >>> I OK with refactoring as long as it makes sense but just doing it for an >>> arbitrary >>> byte limit if it makes the code harder to maintain seems like it could >>> be... I'm not sure what the word is I'm even looking for here! >>> >>> Gary >>> >>> On Sun, Feb 21, 2016 at 5:49 PM, Remko Popma <[email protected]> >>> wrote: >>> >>>> I'd say log4j-api util, so it can be used in the log4j-api >>>> implementation classes as well. >>>> >>>> I would not want to over-complicate this, but there are two ways in >>>> which methods can be optimized for performance which are "fragile" in that >>>> a marker of some kind may be useful: >>>> >>>> * refactor into small private methods 35 bytecodes or less (these are >>>> inlined automatically by Hotspot). I've tried to be consistent in adding a >>>> comment to such methods, but writing the same comment get tedious. >>>> * reduce GC pressure by replacing methods or constructs that allocate >>>> temporary objects with alternatives that don't. However, there are many, >>>> many methods and most don't allocate. I would not want to annotate all >>>> methods... Hmm, need to think about this one more. >>>> >>>> >>>> On Mon, Feb 22, 2016 at 10:24 AM, Matt Sicker <[email protected]> wrote: >>>> >>>>> Do we need this in log4j-api anywhere, or can we stick it in >>>>> log4j-core? >>>>> >>>>> On 19 February 2016 at 18:29, Remko Popma <[email protected]> >>>>> wrote: >>>>> >>>>>> I like that idea very much. >>>>>> >>>>>> Sent from my iPhone >>>>>> >>>>>> On 2016/02/20, at 7:37, Matt Sicker <[email protected]> wrote: >>>>>> >>>>>> We could use an annotation. That would make it easier to implement an >>>>>> aspect-oriented unit test to verify gc-free code paths. >>>>>> >>>>>> On 19 February 2016 at 16:14, Remko Popma <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> Another thing:if you look at the new code, where should I put the >>>>>>> comment? There is nothing tricky about the new logic... >>>>>>> >>>>>>> Gary has a point that it may be good to have some sort of >>>>>>> standardized reminder to distinguish performance sensitive methods >>>>>>> (executed for each event) from non-sensitive logic. Need to think about >>>>>>> that one. (Ideas welcome.) >>>>>>> >>>>>>> On Saturday, 20 February 2016, Matt Sicker <[email protected]> wrote: >>>>>>> >>>>>>>> That sounds like a far more robust solution :) >>>>>>>> >>>>>>>> On 19 February 2016 at 11:18, Remko Popma <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> 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> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Matt Sicker <[email protected]> >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Matt Sicker <[email protected]> >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Matt Sicker <[email protected]> >>>>> >>>> >>>> >>> >>> >>> -- >>> E-Mail: [email protected] | [email protected] >>> Java Persistence with Hibernate, Second Edition >>> <http://www.manning.com/bauer3/> >>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >>> Spring Batch in Action <http://www.manning.com/templier/> >>> Blog: http://garygregory.wordpress.com >>> Home: http://garygregory.com/ >>> Tweet! http://twitter.com/GaryGregory >>> >> >> > > > -- > E-Mail: [email protected] | [email protected] > Java Persistence with Hibernate, Second Edition > <http://www.manning.com/bauer3/> > JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> > Spring Batch in Action <http://www.manning.com/templier/> > Blog: http://garygregory.wordpress.com > Home: http://garygregory.com/ > Tweet! http://twitter.com/GaryGregory > -- E-Mail: [email protected] | [email protected] Java Persistence with Hibernate, Second Edition <http://www.manning.com/bauer3/> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> Spring Batch in Action <http://www.manning.com/templier/> Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory
