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