You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2007/02/10 03:19:57 UTC
svn commit: r505617 -
/tomcat/tc6.0.x/trunk/java/org/apache/jasper/runtime/JspFactoryImpl.java
Author: remm
Date: Fri Feb 9 18:19:57 2007
New Revision: 505617
URL: http://svn.apache.org/viewvc?view=rev&rev=505617
Log:
- As suggested in 41578, experiment with a thread local pool, but in a simpler way (and with an upper bound).
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/jasper/runtime/JspFactoryImpl.java
Modified: tomcat/tc6.0.x/trunk/java/org/apache/jasper/runtime/JspFactoryImpl.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/jasper/runtime/JspFactoryImpl.java?view=diff&rev=505617&r1=505616&r2=505617
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/jasper/runtime/JspFactoryImpl.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/jasper/runtime/JspFactoryImpl.java Fri Feb 9 18:19:57 2007
@@ -46,10 +46,10 @@
private static final String SPEC_VERSION = "2.1";
private static final boolean USE_POOL =
Boolean.valueOf(System.getProperty("org.apache.jasper.runtime.JspFactoryImpl.USE_POOL", "true")).booleanValue();
- private static final boolean THREAD_LOCAL_POOL =
- Boolean.valueOf(System.getProperty("org.apache.jasper.runtime.JspFactoryImpl.THREAD_LOCAL_POOL", "true")).booleanValue();
+ private static final int POOL_SIZE =
+ Integer.valueOf(System.getProperty("org.apache.jasper.runtime.JspFactoryImpl.POOL_SIZE", "8")).intValue();
- private SimplePool pool = new SimplePool( 100 );
+ private ThreadLocal<PageContextPool> localPool = new ThreadLocal<PageContextPool>();
public PageContext getPageContext(Servlet servlet, ServletRequest request,
ServletResponse response, String errorPageURL, boolean needsSession,
@@ -92,9 +92,14 @@
int bufferSize, boolean autoflush) {
try {
PageContext pc;
- if( USE_POOL ) {
- pc = (PageContext) pool.get();
- if( pc == null ) {
+ if (USE_POOL) {
+ PageContextPool pool = localPool.get();
+ if (pool == null) {
+ pool = new PageContextPool();
+ localPool.set(pool);
+ }
+ pc = pool.get();
+ if (pc == null) {
pc = new PageContextImpl();
}
} else {
@@ -113,7 +118,7 @@
private void internalReleasePageContext(PageContext pc) {
pc.release();
if (USE_POOL && (pc instanceof PageContextImpl)) {
- pool.put( pc );
+ localPool.get().put(pc);
}
}
@@ -162,6 +167,34 @@
factory.internalReleasePageContext(pageContext);
return null;
}
+ }
+
+ protected final class PageContextPool {
+
+ private PageContext[] pool;
+
+ private int current = -1;
+
+ public PageContextPool() {
+ this.pool = new PageContext[POOL_SIZE];
+ }
+
+ public void put(PageContext o) {
+ if (current < (POOL_SIZE - 1)) {
+ current++;
+ pool[current] = o;
+ }
+ }
+
+ public PageContext get() {
+ PageContext item = null;
+ if (current >= 0) {
+ item = pool[current];
+ current--;
+ }
+ return item;
+ }
+
}
public JspApplicationContext getJspApplicationContext(ServletContext context) {
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org