[ https://issues.apache.org/jira/browse/HADOOP-6884?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Doug Cutting updated HADOOP-6884: --------------------------------- Attachment: FunAgain.java You've benchmarked a case that isn't in the existing patch (3 variables) and certainly isn't typical. Your 'static' case still boxes. So your benchmark mostly shows that boxing costs, and string concatenation costs even more yet. I don't see how it shows that any of these costs are significant in the Hadoop codebase. I've attached a version that benchmarks the more typical single-parameter using slf4j and a static version that avoids boxing. The output this gives is: java.version = 1.6.0_20 java.runtime.name = Java(TM) SE Runtime Environment java.runtime.version = 1.6.0_20-b02 java.vm.version = 16.3-b01 java.vm.vendor = Sun Microsystems Inc. java.vm.name = Java HotSpot(TM) Server VM java.vm.specification.version = 1.0 java.specification.version = 1.6 os.arch = i386 os.name = Linux os.version = 2.6.32-24-generic-pae n=10000000 LOG.isDebugEnabled(): 13 ms static debug(..) : 78 ms LOG.debug(..) : 472 ms What does this show? It shows that simply switching to slf4j using format strings would remove string concatenation costs speeding log statements by around 10x without any bloat. It does not show whether that improvement would be significant in any larger Hadoop benchmark, but at least the cost in code readability would be null. Further it shows that, if we find that logging costs are significant somewhere due to boxing, we could optimize that with static methods, gaining another 5x without losing any readability. Finally, if we find that logging costs are still somewhere significant, we can improve them yet another 6x with some impairment to readability. This is a bit like manual loop unrolling. We'll do it in certain performance-critical areas when it's shown to provide a significant advantage, but we shouldn't do it blindly for every loop. > 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.