Review request: 8011380: FX dependency on PlatformLogger broken

Mandy Chung mandy.chung at oracle.com
Fri Apr 5 17:32:19 UTC 2013


Laurent,

I believe the awt/net code started logging in 1.4 and 1.5 using 
j.u.logging that was really early taker before the performance overhead 
was considered.

I filed a bug 8011557: improve the logging documentation to advice on 
performance consideration as we may want to mention this in the tutorial 
or other docs as well.  This should belong to java.util.logging instead 
of sun.util.logging.

Having a second thought, Supplier may not address the memory overhead 
concern you raise.  Worth considering any API improvement to address 
both the runtime and memory concern.  It would also be helpful if IDE 
and code analysis tool can hint the developers of such pattern.

Mandy
P.S. I'll be pushing the changeset today.

On 4/5/2013 9:02 AM, Laurent Bourgès wrote:
> Mandy,
>
> I agree it should be well known; but I fixed several cases in awt/net 
> code where isLoggable() calls were missing.
>
> I think it is quite cheap to remind good practices in the 
> PlatformLogger / jul Logger javadoc ...
>
> PS: maybe some quality control tools could check such missing tests 
> (PMD can do it)...
>
>     I believe this was mentioned somewhere in j.u.logging.  A better
>     solution may be to take java.util.function.Supplier parameter that
>     constructs the log message lazily (see
>     http://download.java.net/jdk8/docs/api/java/util/logging/Logger.html#fine(java.util.function.Supplier)
>     <http://download.java.net/jdk8/docs/api/java/util/logging/Logger.html#fine%28java.util.function.Supplier%29>.
>     I can file a RFE to investigate the use of Supplier as in
>     j.u.l.Logger.
>
>
> Very interesting feature, but I am still not aware of such JDK 8 
> features (lambda) ... it seems nice but maybe the syntax will be more 
> complicated / verbose than our usual log statements:
> log.fine(""...)
>
> Laurent
>
>
>
>     On 4/5/2013 1:55 AM, Laurent Bourgès wrote:
>>     Mandy,
>>
>>     I would like to add few performance advices in the PlatformLogger
>>     Javadoc:
>>     "
>>     NOTE: For performance reasons, PlatformLogger usages should take
>>     care of avoiding useless / wasted object creation and method
>>     calls related to *disabled* log statements:
>>     Always use isLoggable(level) wrapping logs at levels (FINEST,
>>     FINER, FINE, CONFIG):
>>
>>     Bad practices:
>>     - string concat:
>>     log.fine("message" + value); // means
>>     StringBuilder(message).append(String.valueOf(value)).toString():
>>     2 objects created and value.toString() called
>>     - varags:
>>     log.fine("message {0}", this); // create an Object[]
>>
>>     Best practices:
>>     if (log.isLoggable(PlatformLogger.FINE) {
>>     log.fine("message" + value);
>>     }
>>
>>     if (log.isLoggable(PlatformLogger.FINE) {
>>     log.fine("message {0}", this);
>>     }
>>     "
>>
>>     What is your opinion ?
>>
>>     Thanks for the given explanations and I hope that this patch will
>>     be submitted soon to JDK8 repository.
>>
>>     Laurent
>
>




More information about the core-libs-dev mailing list