MarginaliaSearch/code/libraries/big-string/java/nu/marginalia/bigstring/CompressionBufferPool.java
Viktor Lofgren 1d34224416 (refac) Remove src/main from all source code paths.
Look, this will make the git history look funny, but trimming unnecessary depth from the source tree is a very necessary sanity-preserving measure when dealing with a super-modularized codebase like this one.

While it makes the project configuration a bit less conventional, it will save you several clicks every time you jump between modules.  Which you'll do a lot, because it's *modul*ar.  The src/main/java convention makes a lot of sense for a non-modular project though.  This ain't that.
2024-02-23 16:13:40 +01:00

27 lines
839 B
Java

package nu.marginalia.bigstring;
import java.util.Arrays;
import java.util.concurrent.ThreadLocalRandom;
/** To avoid contention on the compression buffer, while keeping allocation churn low,
* we use a pool of buffers, randomly selected allocated upon invocation
* <p>
* @see CompressionBuffer CompressionBuffer
* */
public class CompressionBufferPool {
private static final int BUFFER_COUNT = 16;
private final CompressionBuffer[] destBuffer;
public CompressionBufferPool() {
destBuffer = new CompressionBuffer[BUFFER_COUNT];
Arrays.setAll(destBuffer, i -> new CompressionBuffer());
}
/** Get the buffer for the current thread */
public CompressionBuffer bufferForThread() {
int idx = ThreadLocalRandom.current().nextInt(0, BUFFER_COUNT);
return destBuffer[idx];
}
}