chrisvest / stormpot

A fast object pool for the JVM
http://chrisvest.github.io/stormpot/
Apache License 2.0
357 stars 42 forks source link
concurrency connection-pool high-performance java performance pool tdd

== Stormpot

Stormpot is an object pooling library for Java. Use it to recycle objects that are expensive to create. The library will take care of creating and destroying your objects in the background.

image:https://github.com/chrisvest/stormpot/actions/workflows/maven.yml/badge.svg[Build status, link=https://github.com/chrisvest/stormpot/actions/workflows/maven.yml] image:https://codecov.io/gh/chrisvest/stormpot/branch/master/graph/badge.svg[Code coverage, link=https://codecov.io/gh/chrisvest/stormpot]

Stormpot is very mature, is used in production, and has done hundreds of trillions footnote:[Fermi estimate.] claim-release cycles in testing. It is faster and scales better than any competing pool.

=== Why choose Stormpot?

There are a number of options out there, when it comes to object pools on the JVM. Stormpot has been carefully designed for high performance, and robust operation. Some of the things that sets Stormpot apart include:

[NOTE]

Stormpot is an object pool; a homogeneous collection of objects, where it does not matter which particular instance is returned from claim since the objects are all similar. If your objects instead are heterogeneous, with different attributes and identified by a key, then what you need is a object cache. We recommend https://github.com/ben-manes/caffeine[Caffeine] for object caching.

=== Installing

Stormpot 4.0 only depends on Java 21 or newer. If you need to use Java 11 or newer, use Stormpot 3.2. Add it as a Maven dependency to your projects:

[source,xml]

com.github.chrisvest stormpot 4.0

You can also build the latest snapshot from source with mvn clean install. Note that Stormpot 4 require Java 21 or newer.

=== Getting Started

Stormpot needs 3 things before it can pool objects for you:

. A http://chrisvest.github.io/stormpot/site/apidocs/stormpot/stormpot/Poolable.html[Poolable] type of objects it can pool. You have to implement this yourself. . An http://chrisvest.github.io/stormpot/site/apidocs/stormpot/stormpot/Allocator.html[Allocator] to allocate and deallocate the Poolable objects. You have to implement this yourself. . And a place where it all comes together:

[source,java]

MyAllocator allocator = new MyAllocator(); Pool pool = Pool.from(allocator).build(); Timeout timeout = new Timeout(1, TimeUnit.SECONDS);

MyPoolable object = pool.claim(timeout); try { // Do stuff with 'object'. // Note: 'claim' returns 'null' if it times out. } finally { if (object != null) { object.release(); } }

=== Contributing

Whatever you decide to do, don't hesitate to ask questions in the discussions on github if you have doubts or get stuck.