Syntax-wise, you can use either @PerformanceSensitive("foo") or
@PerformanceSensitive({"foo", "bar"})

On 21 February 2016 at 22:23, Matt Sicker <[email protected]> wrote:

> I can change it for the former (you need to use a string array, though),
> the latter is only possible in Java 1.8+.
>
> On 21 February 2016 at 22:22, Remko Popma <[email protected]> wrote:
>
>> Can an annotation have multiple values?
>> @PerformanceSensitive("AllocationFree", "CriticalPath")
>>
>> Or can a method be annotated with the same annotation appear multiple
>> times?
>> Both @PerformanceSensitive("AllocationFree")
>> and @PerformanceSensitive("CriticalPath")?
>>
>>
>> On Monday, 22 February 2016, Remko Popma <[email protected]> wrote:
>>
>>> I like @PerformanceSensitive very much!
>>>
>>> I can then see specific variations like
>>> @PerformanceSensitive("InlineSize")
>>> @PerformanceSensitive("AllocationFree")
>>>
>>>
>>>
>>> Sent from my iPhone
>>>
>>> On 2016/02/22, at 12:48, Gary Gregory <[email protected]> wrote:
>>>
>>> Well, a method can be on the critical path and not have been
>>> hand-optimized either because it is already as fast as can be or we have
>>> not gotten around to it (which make you want to have a @NeedsOptimization,
>>> rabbit hole warning!). So we could have both. Some methods would
>>> be @CriticalPath, and some both @CriticalPath and @HandOptimized. But you
>>> would not have just @HandOptimized or if you did it would
>>> imply @CriticalPath. which is a bit too clever ....
>>>
>>> Gary
>>>
>>> On Sun, Feb 21, 2016 at 7:43 PM, Matt Sicker <[email protected]> wrote:
>>>
>>>> Those both sound better, but I can't decide on which.
>>>>
>>>> On 21 February 2016 at 21:32, Gary Gregory <[email protected]>
>>>> wrote:
>>>>
>>>>> I wonder if @CriticalPath or @HandOptimized would convey better what
>>>>> we are trying to express?
>>>>>
>>>>> Gary
>>>>>
>>>>>
>>>>> ---------- Forwarded message ----------
>>>>> From: <[email protected]>
>>>>> Date: Sun, Feb 21, 2016 at 7:02 PM
>>>>> Subject: logging-log4j2 git commit: Add PerformanceSensitive
>>>>> annotation.
>>>>> To: [email protected]
>>>>>
>>>>>
>>>>> Repository: logging-log4j2
>>>>> Updated Branches:
>>>>>   refs/heads/master f884234a8 -> 4aa7df826
>>>>>
>>>>>
>>>>> Add PerformanceSensitive annotation.
>>>>>
>>>>>
>>>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>>>> Commit:
>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4aa7df82
>>>>> Tree:
>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4aa7df82
>>>>> Diff:
>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4aa7df82
>>>>>
>>>>> Branch: refs/heads/master
>>>>> Commit: 4aa7df826de7e359ac3bde98597fe5ca6e4b5901
>>>>> Parents: f884234
>>>>> Author: Matt Sicker <[email protected]>
>>>>> Authored: Sun Feb 21 21:02:51 2016 -0600
>>>>> Committer: Matt Sicker <[email protected]>
>>>>> Committed: Sun Feb 21 21:02:51 2016 -0600
>>>>>
>>>>> ----------------------------------------------------------------------
>>>>>  .../log4j/util/PerformanceSensitive.java        | 29
>>>>> ++++++++++++++++++++
>>>>>  .../logging/log4j/util/ReflectionUtil.java      |  5 ++++
>>>>>  .../log4j/core/config/AppenderControl.java      |  4 +++
>>>>>  .../core/config/AppenderControlArraySet.java    |  8 ++++--
>>>>>  4 files changed, 43 insertions(+), 3 deletions(-)
>>>>> ----------------------------------------------------------------------
>>>>>
>>>>>
>>>>>
>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
>>>>> new file mode 100644
>>>>> index 0000000..3fbb058
>>>>> --- /dev/null
>>>>> +++
>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
>>>>> @@ -0,0 +1,29 @@
>>>>> +/*
>>>>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>>>>> + * contributor license agreements. See the NOTICE file distributed
>>>>> with
>>>>> + * this work for additional information regarding copyright ownership.
>>>>> + * The ASF licenses this file to You under the Apache license,
>>>>> Version 2.0
>>>>> + * (the "License"); you may not use this file except in compliance
>>>>> with
>>>>> + * the License. You may obtain a copy of the License at
>>>>> + *
>>>>> + *      http://www.apache.org/licenses/LICENSE-2.0
>>>>> + *
>>>>> + * Unless required by applicable law or agreed to in writing, software
>>>>> + * distributed under the License is distributed on an "AS IS" BASIS,
>>>>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>> implied.
>>>>> + * See the license for the specific language governing permissions and
>>>>> + * limitations under the license.
>>>>> + */
>>>>> +
>>>>> +package org.apache.logging.log4j.util;
>>>>> +
>>>>> +/**
>>>>> + * Indicates that a particular annotated construct was written with
>>>>> certain performance constraints in mind that
>>>>> + * should be considered when modifying or testing.
>>>>> + *
>>>>> + * @since 2.6
>>>>> + */
>>>>> +public @interface PerformanceSensitive {
>>>>> +    /** Description of why this is written the way it is. */
>>>>> +    String value() default "";
>>>>> +}
>>>>>
>>>>>
>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>>>>> index 6e7ce4a..dec2350 100644
>>>>> ---
>>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>>>>> +++
>>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>>>>> @@ -117,6 +117,7 @@ public final class ReflectionUtil {
>>>>>      // (MS) I believe this would work without any modifications
>>>>> elsewhere, but I could be wrong
>>>>>
>>>>>      // migrated from ReflectiveCallerClassUtility
>>>>> +    @PerformanceSensitive
>>>>>      public static Class<?> getCallerClass(final int depth) {
>>>>>          if (depth < 0) {
>>>>>              throw new
>>>>> IndexOutOfBoundsException(Integer.toString(depth));
>>>>> @@ -193,11 +194,13 @@ public final class ReflectionUtil {
>>>>>      }
>>>>>
>>>>>      // migrated from ClassLoaderContextSelector
>>>>> +    @PerformanceSensitive
>>>>>      public static Class<?> getCallerClass(final String fqcn) {
>>>>>          return getCallerClass(fqcn, Strings.EMPTY);
>>>>>      }
>>>>>
>>>>>      // migrated from Log4jLoggerFactory
>>>>> +    @PerformanceSensitive
>>>>>      public static Class<?> getCallerClass(final String fqcn, final
>>>>> String pkg) {
>>>>>          if (supportsFastReflection()) {
>>>>>              boolean next = false;
>>>>> @@ -227,6 +230,7 @@ public final class ReflectionUtil {
>>>>>      }
>>>>>
>>>>>      // added for use in LoggerAdapter implementations mainly
>>>>> +    @PerformanceSensitive
>>>>>      public static Class<?> getCallerClass(final Class<?> anchor) {
>>>>>          if (supportsFastReflection()) {
>>>>>              boolean next = false;
>>>>> @@ -270,6 +274,7 @@ public final class ReflectionUtil {
>>>>>      }
>>>>>
>>>>>      // migrated from ThrowableProxy
>>>>> +    @PerformanceSensitive
>>>>>      public static Stack<Class<?>> getCurrentStackTrace() {
>>>>>          // benchmarks show that using the SecurityManager is much
>>>>> faster than looping through getCallerClass(int)
>>>>>          if (SECURITY_MANAGER != null) {
>>>>>
>>>>>
>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>>>>> index f65011d..175c9e1 100644
>>>>> ---
>>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>>>>> +++
>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>>>>> @@ -25,6 +25,7 @@ import org.apache.logging.log4j.core.LogEvent;
>>>>>  import
>>>>> org.apache.logging.log4j.core.appender.AppenderLoggingException;
>>>>>  import org.apache.logging.log4j.core.filter.AbstractFilterable;
>>>>>  import org.apache.logging.log4j.core.filter.Filterable;
>>>>> +import org.apache.logging.log4j.util.PerformanceSensitive;
>>>>>
>>>>>  /**
>>>>>   * Wraps an {@link Appender} with details an appender implementation
>>>>> shouldn't need to know about.
>>>>> @@ -88,14 +89,17 @@ public class AppenderControl extends
>>>>> AbstractFilterable {
>>>>>          return isFilteredByAppenderControl(event) ||
>>>>> isFilteredByLevel(event) || isRecursiveCall();
>>>>>      }
>>>>>
>>>>> +    @PerformanceSensitive
>>>>>      private boolean isFilteredByAppenderControl(final LogEvent event)
>>>>> {
>>>>>          return getFilter() != null && Filter.Result.DENY ==
>>>>> getFilter().filter(event);
>>>>>      }
>>>>>
>>>>> +    @PerformanceSensitive
>>>>>      private boolean isFilteredByLevel(final LogEvent event) {
>>>>>          return level != null && intLevel <
>>>>> event.getLevel().intLevel();
>>>>>      }
>>>>>
>>>>> +    @PerformanceSensitive
>>>>>      private boolean isRecursiveCall() {
>>>>>          if (recursive.get() != null) {
>>>>>              appenderErrorHandlerMessage("Recursive call to appender
>>>>> ");
>>>>>
>>>>>
>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>>>>> index 78a42b3..d30ce32 100644
>>>>> ---
>>>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>>>>> +++
>>>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>>>>> @@ -16,17 +16,19 @@
>>>>>   */
>>>>>  package org.apache.logging.log4j.core.config;
>>>>>
>>>>> -import org.apache.logging.log4j.core.Appender;
>>>>> -
>>>>>  import java.util.Arrays;
>>>>>  import java.util.HashMap;
>>>>>  import java.util.Map;
>>>>>  import java.util.Objects;
>>>>>  import java.util.concurrent.atomic.AtomicReference;
>>>>>
>>>>> +import org.apache.logging.log4j.core.Appender;
>>>>> +import org.apache.logging.log4j.util.PerformanceSensitive;
>>>>> +
>>>>>  /**
>>>>>   * Data structure with similar semantics to CopyOnWriteArraySet, but
>>>>> giving direct access to the underlying array.
>>>>>   */
>>>>> +@PerformanceSensitive
>>>>>  public class AppenderControlArraySet {
>>>>>      private final AtomicReference<AppenderControl[]> appenderArray =
>>>>> new AtomicReference<>(new AppenderControl[0]);
>>>>>
>>>>> @@ -117,4 +119,4 @@ public class AppenderControlArraySet {
>>>>>      public AppenderControl[] get() {
>>>>>          return appenderArray.get();
>>>>>      }
>>>>> -}
>>>>> \ No newline at end of file
>>>>> +}
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> 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
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> 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
>>>
>>>
>
>
> --
> Matt Sicker <[email protected]>
>



-- 
Matt Sicker <[email protected]>

Reply via email to