On 17/10/2012 13:57, Konstantin Kolinko wrote: > 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:
Go for it. Mark > > 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 > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org