On 17/10/2012 13:57, Konstantin Kolinko wrote:
> 2012/9/23 <[email protected]>:
>> 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: [email protected]
> For additional commands, e-mail: [email protected]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]