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

Reply via email to