[ https://issues.apache.org/jira/browse/HADOOP-6884?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12900390#action_12900390 ]
Doug Cutting commented on HADOOP-6884: -------------------------------------- > I found at least two three-variable cases in Erik's latest patch. I missed those, but it's still different from your benchmark, which focussed on boxed variables. Those examples might look something like: debug("Exception while invoking {} of {}. Retrying.", method.getName(), implementation.getClass(), StringUtils.stringifyException(e)); That last parameter would make things slow, but, I'd be surprised if you can show that optimizing this substantially improves Hadoop performance, since this only runs in the case that a retryable method fails with an exception. If we ever found that such cases were problematic, we might add methods like: static void debug(String message, Throwable t); static void debug(String message, Throwable t, Object p1); static void debug(String message, Throwable t, Object p1, Object p2); static void debug(String message, Throwable t, Object... parameters); Perhaps we could submit a patch to slf4j adding such methods there. The second case could become something like: debug("for protocol authorization compare ({}):{} with ", clientPrincipal, shortName, user.getShortUserName)); In this case all parameters are strings, so no boxing would occur. > Your benchmark also shows that LOG.isDebugEnabled() provides the best results. It provides significantly better results in a micro-benchmark. But optimizations that increase code size should show significant improvement in real application performance, not just micro-benchmarks. Until someone's shown that this optimization measurably improves end performance, I see no urgency to commit it. > Add LOG.isDebugEnabled() guard for each LOG.debug("...") > -------------------------------------------------------- > > Key: HADOOP-6884 > URL: https://issues.apache.org/jira/browse/HADOOP-6884 > Project: Hadoop Common > Issue Type: Improvement > Affects Versions: 0.22.0 > Reporter: Erik Steffl > Assignee: Erik Steffl > Fix For: 0.22.0 > > Attachments: FunAgain.java, FunAgain.java, HADOOP-6884-0.22-1.patch, > HADOOP-6884-0.22.patch > > > Each LOG.debug("...") should be executed only if LOG.isDebugEnabled() is > true, in some cases it's expensive to construct the string that is being > printed to log. It's much easier to always use LOG.isDebugEnabled() because > it's easier to check (rather than in each case reason whether it's necessary > or not). -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.