RFR: JDK-8005263: Logging APIs takes Supplier<String> for message
brian.goetz at oracle.com
Sun Dec 23 18:45:08 UTC 2012
>> Henry - just a quick comment on the class description. I think it would
>> be better not to include the sentence "Since 1.8 ..." as it that will
>> quickly become a historical note. It would be much better (in my view)
>> to just highlight the methods with something like "Several of the
>> methods take a Supplier function ..." and make the potential performance
>> benefit of using these methods clear.
> You should also add a note saying that the supplier can be specified as
> a lambda and in that case, the lambda *must* not capture value of local
> variable, otherwise a supplier object will be created each time you log
No, don't do this.
First of all, just because the performance characteristics of capturing
lambdas are one way today on HotSpot compared to non-capturing, does not
mean we should burn this into spec. Also, there's no way to enforce it.
More importantly, a capturing lambda might still be way better than a
String, as in this example:
log(DEBUG, () -> "Children of " + name + ": " + getChildrenOf(name));
Collecting getChildren (and turning it into a String) commonly involves
something thousands of times as expensive as an object creation.
More information about the core-libs-dev