commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Archie Cobbs (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (LOGGING-37) [logging] LogFactory#getLogFactory should not look for method every time
Date Wed, 25 Jun 2014 16:14:24 GMT

    [ https://issues.apache.org/jira/browse/LOGGING-37?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14043663#comment-14043663
] 

Archie Cobbs commented on LOGGING-37:
-------------------------------------

I noticed this method consuming inordinate CPU on my system as well.

Can the next release of commons-logging drop support for Java 1.1? If so then this issue can
go away... simply invoke {{Thread.getContextClassLoader()}} directly.


> [logging] LogFactory#getLogFactory should not look for method every time
> ------------------------------------------------------------------------
>
>                 Key: LOGGING-37
>                 URL: https://issues.apache.org/jira/browse/LOGGING-37
>             Project: Commons Logging
>          Issue Type: Bug
>    Affects Versions: 1.0.4
>         Environment: Operating System: other
> Platform: Other
>            Reporter: Matthias Ernst
>
> LogFactory checks for the existence of Thread#getContextClassLoader every time
> #getLogFactory is invoked and does a reflective invocation. This is
> unnecessarily expensive if many Log objects are created. An easy patch is to
> remember the Method object; the lookup happens only once and it will massively
> profit from reflection optimizations after a number of calls (a Java code stub
> is generated by the reflection package).
> Patch:
> 419a420,426
> >     private static Method GET_CONTEXT_CLASS_LOADER = null;
> >     static {
> >       try {
> >         GET_CONTEXT_CLASS_LOADER = Thread.class.getMethod("getContextClassLoad
> er", null);
> >       } catch (NoSuchMethodException e) {
> >       }
> >     }
> 436,439c443
> <         try {
> <             // Are we running on a JDK 1.2 or later system?
> <             Method method = Thread.class.getMethod("getContextClassLoader", nu
> ll);
> <
> ---
> >         if(GET_CONTEXT_CLASS_LOADER != null) {
> 442c446
> <                 classLoader = (ClassLoader)method.invoke(Thread.currentThread(
> ), null);
> ---
> >                 classLoader = (ClassLoader)GET_CONTEXT_CLASS_LOADER.invoke(Thr
> ead.currentThread(), null);
> 472c476
> <         } catch (NoSuchMethodException e) {
> ---
> >         } else {



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message