Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Gzip and Deflate encoding providers accept a DeflaterPool allowing them to reuse deflaters to cut down on jni overhead. No pooling implementations have been provided yet. bugfix: The default DeflaterPool implementation will call Deflater.end() when finished, releasing the native ref.
- Loading branch information
1 parent
4b88e19
commit 0d2d03a
Showing
9 changed files
with
259 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
63 changes: 63 additions & 0 deletions
63
core/src/main/java/io/undertow/util/NewInstanceObjectPool.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
/* | ||
* JBoss, Home of Professional Open Source. | ||
* Copyright 2014 Red Hat, Inc., and individual contributors | ||
* as indicated by the @author tags. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package io.undertow.util; | ||
|
||
import java.util.function.Consumer; | ||
import java.util.function.Supplier; | ||
|
||
import io.undertow.UndertowMessages; | ||
|
||
/** | ||
* @author ckozak | ||
* @author Stuart Douglas | ||
*/ | ||
public class NewInstanceObjectPool<T> implements ObjectPool { | ||
|
||
private final Supplier<T> supplier; | ||
private final Consumer<T> consumer; | ||
|
||
public NewInstanceObjectPool(Supplier<T> supplier, Consumer<T> consumer) { | ||
this.supplier = supplier; | ||
this.consumer = consumer; | ||
} | ||
|
||
|
||
@Override | ||
public PooledObject allocate() { | ||
final T obj = supplier.get(); | ||
return new PooledObject() { | ||
|
||
private volatile boolean closed = false; | ||
|
||
@Override | ||
public T getObject() { | ||
if(closed) { | ||
throw UndertowMessages.MESSAGES.objectIsClosed(); | ||
} | ||
return obj; | ||
} | ||
|
||
@Override | ||
public void close() { | ||
closed = true; | ||
consumer.accept(obj); | ||
} | ||
}; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
/* | ||
* JBoss, Home of Professional Open Source. | ||
* Copyright 2014 Red Hat, Inc., and individual contributors | ||
* as indicated by the @author tags. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package io.undertow.util; | ||
|
||
/** | ||
* A pool of objects. | ||
* | ||
* @author ckozak | ||
* @author Stuart Douglas | ||
*/ | ||
public interface ObjectPool<T> { | ||
|
||
PooledObject<T> allocate(); | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
/* | ||
* JBoss, Home of Professional Open Source. | ||
* Copyright 2014 Red Hat, Inc., and individual contributors | ||
* as indicated by the @author tags. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package io.undertow.util; | ||
|
||
import java.io.Closeable; | ||
|
||
/** | ||
* Represents a generic pooled object | ||
* | ||
* @author Stuart Douglas | ||
*/ | ||
public interface PooledObject<T> extends Closeable, AutoCloseable { | ||
|
||
T getObject(); | ||
|
||
void close(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
/* | ||
* JBoss, Home of Professional Open Source. | ||
* Copyright 2014 Red Hat, Inc., and individual contributors | ||
* as indicated by the @author tags. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package io.undertow.util; | ||
|
||
import java.util.concurrent.LinkedBlockingDeque; | ||
import java.util.function.Consumer; | ||
import java.util.function.Supplier; | ||
|
||
import io.undertow.UndertowMessages; | ||
|
||
/** | ||
* Simple pool that attempts to maintain a specified number of objects in the pool. If more objects are created new ones | ||
* are created on the fly, and then destroyed once the pool is full. | ||
* | ||
* @author ckozak | ||
* @author Stuart Douglas | ||
*/ | ||
public class SimpleObjectPool<T> implements ObjectPool { | ||
|
||
private final Supplier<T> supplier; | ||
private final Consumer<T> consumer; | ||
private final LinkedBlockingDeque<T> pool; | ||
|
||
public SimpleObjectPool(int poolSize, Supplier<T> supplier, Consumer<T> consumer) { | ||
this.supplier = supplier; | ||
this.consumer = consumer; | ||
pool = new LinkedBlockingDeque<T>(poolSize); | ||
} | ||
|
||
|
||
@Override | ||
public PooledObject allocate() { | ||
T obj = pool.poll(); | ||
if(obj == null) { | ||
obj = supplier.get(); | ||
} | ||
final T finObj = obj; | ||
return new PooledObject() { | ||
|
||
private volatile boolean closed = false; | ||
|
||
@Override | ||
public T getObject() { | ||
if (closed) { | ||
throw UndertowMessages.MESSAGES.objectIsClosed(); | ||
} | ||
return finObj; | ||
} | ||
|
||
@Override | ||
public void close() { | ||
closed = true; | ||
if(!pool.offer(finObj)) { | ||
consumer.accept(finObj); | ||
} | ||
} | ||
}; | ||
} | ||
} |