Author: markt
Date: Sun Sep 23 20:11:31 2012
New Revision: 1389138
URL: http://svn.apache.org/viewvc?rev=1389138&view=rev
Log:
Switch to ConcurrentStack removing 4% of object allocation during load test
(low hanging fruit)
Modified:
tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.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=1389138&r1=1389137&r2=1389138&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java (original)
+++ tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java Sun Sep 23
20:11:31 2012
@@ -35,9 +35,7 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
-import java.util.Queue;
import java.util.TimeZone;
-import java.util.concurrent.ConcurrentLinkedQueue;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
@@ -55,6 +53,7 @@ import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.buf.B2CConverter;
+import org.apache.tomcat.util.collections.SynchronizedStack;
/**
@@ -572,7 +571,8 @@ public class AccessLogValve extends Valv
* Buffer pool used for log message generation. Pool used to reduce garbage
* generation.
*/
- private Queue<CharBuffer> charBuffers = new ConcurrentLinkedQueue<>();
+ private SynchronizedStack<CharBuffer> charBuffers =
+ new SynchronizedStack<>();
/**
* Log message buffers are usually recycled and re-used. To prevent
@@ -935,7 +935,7 @@ public class AccessLogValve extends Valv
long start = request.getCoyoteRequest().getStartTime();
Date date = getDate(start + time);
- CharBuffer result = charBuffers.poll();
+ CharBuffer result = charBuffers.pop();
if (result == null) {
result = CharBuffer.allocate(128);
}
@@ -947,10 +947,9 @@ public class AccessLogValve extends Valv
result.flip();
log(result);
- // TODO - Make this configurable
if (result.length() <= maxLogMessageBufferSize) {
result.clear();
- charBuffers.add(result);
+ charBuffers.push(result);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]