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]>
