geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Blewitt <>
Subject Re: Logging code and Garbage Collection
Date Tue, 12 Aug 2003 23:35:36 GMT
> I know this is a tad early to comment on the code in CVS, but I've 
> just noticed code like this (in 
> org.apache.geronimo.deployment.scanner.DeploymentScanner)
> log.debug("Finished scan of " + url + ", " + result.size() + " 
> deployment(s) found");
> Could everyone make sure that log statements are wrapped (eg.):
> if (log.isDebugEnabled()) {
>    log.debug("Finished scan of " + url + ", " + result.size() + " 
> deployment(s) found");
> }
> The reason being that while profiling a J2EE application a while back 
> we found that well over 50% of the processors' time was spent 
> executing log statements just like the above - most of that with the 
> VM messing around creating StringBuffer objects and then garbage 
> collecting them.  In the case above, this will happen regardless of 
> the logging level in use i.e. *even if* debug messages aren't actually 
> being output.

I agree completely. In fact, I've also been party to one such 
application that used this style of logging so badly that their 
application crawled. The problem was, when they put the conditional log 
statements in the application ran so fast that it showed up all their 
syncronization holes in the multi-threading parts of the code.

They put the log stuff back so that it ran slower to avoid debugging 
the multi-threaded spaghetti. :-)

> I know this sounds incredibly picky at this stage but I think it'd be 
> an idea to get into good habits now rather than later.  If others 
> agree with the above, I'll add it to the coding standards in the Wiki.

I'd say add it to the coding standards. Many people may not even be 
aware that there is such an issue, and having things overspecified in 
the coding standards is more likely to produce better results than 
those which are underspecified.


View raw message