Author: markt Date: Wed Jun 1 21:44:37 2016 New Revision: 1746503 URL: http://svn.apache.org/viewvc?rev=1746503&view=rev Log: Add a SocketProcessor cache to align with NIO/NIO2
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1746503&r1=1746502&r2=1746503&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Wed Jun 1 21:44:37 2016 @@ -51,6 +51,7 @@ import org.apache.tomcat.jni.Socket; import org.apache.tomcat.jni.Status; import org.apache.tomcat.util.ExceptionUtils; import org.apache.tomcat.util.buf.ByteBufferUtils; +import org.apache.tomcat.util.collections.SynchronizedStack; import org.apache.tomcat.util.net.AbstractEndpoint.Acceptor.AcceptorState; import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState; import org.apache.tomcat.util.net.SSLHostConfig.Type; @@ -106,6 +107,11 @@ public class AprEndpoint extends Abstrac private final Map<Long,AprSocketWrapper> connections = new ConcurrentHashMap<>(); + /** + * Cache for SocketProcessor objects + */ + private SynchronizedStack<SocketProcessor> processorCache; + // ------------------------------------------------------------ Constructor public AprEndpoint() { @@ -533,6 +539,9 @@ public class AprEndpoint extends Abstrac running = true; paused = false; + processorCache = new SynchronizedStack<>(SynchronizedStack.DEFAULT_SIZE, + socketProperties.getProcessorCache()); + // Create worker collection if (getExecutor() == null) { createExecutor(); @@ -622,6 +631,7 @@ public class AprEndpoint extends Abstrac } sendfile = null; } + processorCache.clear(); } shutdownExecutor(); } @@ -821,12 +831,17 @@ public class AprEndpoint extends Abstrac // result of calling AsyncContext.dispatch() from a non-container // thread synchronized (socketWrapper) { - SocketProcessor proc = new SocketProcessor(socketWrapper, event); + SocketProcessor sc = processorCache.pop(); + if (sc == null) { + sc = new SocketProcessor(socketWrapper, event); + } else { + sc.reset(socketWrapper, event); + } Executor executor = getExecutor(); if (dispatch && executor != null) { - executor.execute(proc); + executor.execute(sc); } else { - proc.run(); + sc.run(); } } } catch (RejectedExecutionException ree) { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org