java.awt event processing performance degradation on JRE7 - linux

Nicolas Carranza nicarran at gmail.com
Tue Apr 17 18:01:03 PDT 2012


Federico's patch solves  the performance regression (see:
http://mail.openjdk.java.net/pipermail/jdk7u-dev/2012-April/002694.html
). But instead of this patch I find better to change the PlatformLogger
class: insert "if(!isLoggable(level)) return;" at the beginning of the
method sun.util.logging.PlatformLogger.JavaLogger.doLog(int level,
String msg, Object... params) . The string convertion affecting the
performance is done on the PlatformLogger.JavaLogger.doLog (even when
the message is not loggable) and it is there where the problem should be
fixed (to be more clear and also cover more use cases). Fixing it there
also clears why the performance regression does not happen when
redirectPlatformLoggers has not been called (when logging is not used):
PlatformLogger.LoggerProxy.doLog(int level, String msg, Object...
params) does not do the string convertion  when the message is not
loggable.

Federico's patch has already been pushed to the jdk8 repository, when
will it be applied to jdk7 (or my propossed change if it is preferred)?

[ Here is a jvisualvm memory profiling snapshot of
PerformanceRegresionTest3:
http://www.java.net/forum/topic/performance/general-performance-discussion/jre7s-javaawt-performance-degradation-caused-javautillogging-linux#comment-823486
. ]

Cheers,
Nicolas

On 04/16/2012 09:40 PM, Mandy Chung wrote:
> Nicolas,
>
> Thanks for reporting the problem.   I am curious if you have collected
> any profiling data that shows
> sun.util.logging.PlatformLogger.redirectPlatformLoggers() is the cause
> of the performance degradation.  This redirection is done as part of
> the logging initialization before JFrame is initialized.  Since the
> performance degradation you observed is after the JFrame has been
> instantiated, it could be something else.  If it's logging-related, it
> would be sun.util.logging.PlatformLogger.
>
> Mandy
>
> On 4/16/2012 6:18 AM, Daniel D. Daugherty wrote:
>> java.util.logging is currently handled by the Serviceability Team.
>> Adding that alias to this e-mail thread...
>>
>> Dan
>>
>>
>> On 4/16/12 12:17 AM, Nicolas Carranza wrote:
>>> Moving the mouse pointer over a java.awt.Window using JRE7 consumes
>>> aprox. twice the CPU time as with JRE6 when logging is used (when a
>>> call
>>> to java.util.logging.getLogger(String)---even without using the
>>> returned
>>> Logger--- has been done). Keyboard key event processing suffers the
>>> same
>>> performance penalty. For steps to reproduce this problem please look
>>> at:
>>> http://www.java.net/forum/topic/performance/general-performance-discussion/jre7s-javaawt-performance-degradation-caused-javautillogging-linux
>>>
>>> .
>>>
>>> The performance degradation seems to be "enabled" by the call of
>>> sun.util.logging.PlatformLogger.redirectPlatformLoggers() done inside
>>> java.util.LogManager.readPrimorialConfiguration() on JRE7. Call chain:
>>> Logger.getLogger()->LogManager.getLogManager()->
>>> LogManager.readPrimordialConfiguration()->sun.util.logging.PlatformLogger.redirectPlatformLoggers().
>>>
>>>
>>> This call is not made on JRE6. If this problem is not easy to solve
>>> then
>>> I guess is better to remove this call from JRE7's
>>> readPrimordialConfiguration as it does more harm than good.
>>>
>>> Please let me know if there is a better place to report this problem. A
>>> couple of weeks ago I "opened" a bug report on bugs.sun.com but I
>>> received no response at all.
>>>
>>> Cheers,
>>> Nicolas
>




More information about the jdk7u-dev mailing list