You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2001/03/23 03:25:33 UTC
cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/util/collections SimplePool.java
costin 01/03/22 18:25:33
Modified: src/share/org/apache/tomcat/util/collections SimplePool.java
Log:
A small ( or big ) improvement to the SimplePool.
Allow creation of a small pool that will grow to max. That will help
for scalability and reduce memory usage.
Revision Changes Path
1.3 +45 -15 jakarta-tomcat/src/share/org/apache/tomcat/util/collections/SimplePool.java
Index: SimplePool.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/collections/SimplePool.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SimplePool.java 2001/02/28 19:24:32 1.2
+++ SimplePool.java 2001/03/23 02:25:32 1.3
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/collections/SimplePool.java,v 1.2 2001/02/28 19:24:32 larryi Exp $
- * $Revision: 1.2 $
- * $Date: 2001/02/28 19:24:32 $
+ * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/collections/SimplePool.java,v 1.3 2001/03/23 02:25:32 costin Exp $
+ * $Revision: 1.3 $
+ * $Date: 2001/03/23 02:25:32 $
*
* ====================================================================
*
@@ -69,7 +69,7 @@
* The pool will ignore overflow and return null if empty.
*
* @author Gal Shachor
- * @author Costin
+ * @author Costin Manolache
*/
public final class SimplePool {
/*
@@ -78,35 +78,52 @@
private Object pool[];
private int max;
+ private int last;
private int current=-1;
-
- Object lock;
- public static final int DEFAULT_SIZE=16;
+
+ private Object lock;
+ public static final int DEFAULT_SIZE=32;
+ static final int debug=0;
public SimplePool() {
- this.max=DEFAULT_SIZE;
- pool=new Object[max];
- lock=new Object();
+ this(DEFAULT_SIZE,DEFAULT_SIZE);
}
- public SimplePool(int max) {
+ public SimplePool(int size) {
+ this(size, size);
+ }
+
+ public SimplePool(int size, int max) {
this.max=max;
- pool=new Object[max];
+ pool=new Object[size];
+ this.last=size-1;
lock=new Object();
}
public void set(Object o) {
put(o);
}
+
/**
* Add the object to the pool, silent nothing if the pool is full
*/
public void put(Object o) {
synchronized( lock ) {
- if( current < (max-1) ) {
- current += 1;
+ if( current < last ) {
+ current++;
+ pool[current] = o;
+ } else if( current < max ) {
+ // realocate
+ int newSize=pool.length*2;
+ if( newSize > max ) newSize=max+1;
+ Object tmp[]=new Object[newSize];
+ last=newSize-1;
+ System.arraycopy( pool, 0, tmp, 0, pool.length);
+ pool=tmp;
+ current++;
pool[current] = o;
- }
+ }
+ if( debug > 0 ) log("put " + o + " " + current + " " + max );
}
}
@@ -120,6 +137,8 @@
item = pool[current];
current -= 1;
}
+ if( debug > 0 )
+ log("get " + item + " " + current + " " + max);
}
return item;
}
@@ -129,5 +148,16 @@
*/
public int getMax() {
return max;
+ }
+
+ /**
+ * Number of object in the pool
+ */
+ public int getCount() {
+ return current+1;
+ }
+
+ private void log( String s ) {
+ System.out.println("SimplePool: " + s );
}
}