2012/9/23 <ma...@apache.org>: > Author: markt > Date: Sun Sep 23 10:36:58 2012 > New Revision: 1389005 > > URL: http://svn.apache.org/viewvc?rev=1389005&view=rev > Log: > More GC reduction in the AccessLog. Integer.toString(response.getStatus()) > was responsible for ~4% of allocated objects under load > > Modified: > tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java > tomcat/trunk/java/org/apache/catalina/valves/Constants.java > > Modified: tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java > URL: > http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java?rev=1389005&r1=1389004&r2=1389005&view=diff > ============================================================================== > --- tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java > (original) > +++ tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java Sun Sep > 23 10:36:58 2012 > @@ -41,6 +41,7 @@ import java.util.concurrent.ConcurrentLi > > import javax.servlet.ServletException; > import javax.servlet.http.Cookie; > +import javax.servlet.http.HttpServletResponse; > import javax.servlet.http.HttpSession; > > import org.apache.catalina.AccessLog; > @@ -1617,7 +1618,134 @@ public class AccessLogValve extends Valv > public void addElement(CharBuffer buf, Date date, Request request, > Response response, long time) { > if (response != null) { > - buf.append(Integer.toString(response.getStatus())); > + // This approach is used to reduce GC > + switch (response.getStatus()) { > + case HttpServletResponse.SC_CONTINUE: > + buf.put(Constants.SC_CONTINUE_CHAR); > + break; > + case HttpServletResponse.SC_SWITCHING_PROTOCOLS: > + buf.put(Constants.SC_SWITCHING_PROTOCOLS_CHAR); > + break; >(...) > + } > } else { > buf.append('-'); > } > > Modified: tomcat/trunk/java/org/apache/catalina/valves/Constants.java > URL: > http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/Constants.java?rev=1389005&r1=1389004&r2=1389005&view=diff > ============================================================================== > --- tomcat/trunk/java/org/apache/catalina/valves/Constants.java (original) > +++ tomcat/trunk/java/org/apache/catalina/valves/Constants.java Sun Sep 23 > 10:36:58 2012 > @@ -36,4 +36,44 @@ public final class Constants { > public static final String COMBINED_PATTERN = "%h %l %u %t \"%r\" %s > %b \"%{Referer}i\" \"%{User-Agent}i\""; > } > > + public static final char[] SC_CONTINUE_CHAR = new char[] {'1', '0', '0'}; > + public static final char[] SC_SWITCHING_PROTOCOLS_CHAR = new char[] > {'1', '0', '1'}; >(...) > } >
It is ugly and unmanageable. BTW, if someone changes the content of those char arrays, the access log may become a mess. I propose to just write the digits. I think the following will work, appending a digit value to the code of '0' character: int status = response.getStatus(); if (100 <= status && status < 1000) { buf.write((char) ('0' + (status/100))); buf.write((char) ('0' + ((status / 10) % 10))); buf.write((char) ('0' + (status % 10))); } else { buf.write(Integer.toString(status)); } Best regards, Konstantin Kolinko --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org