On Mon, Jan 6, 2020 at 7:09 PM Matt Sicker <[email protected]> wrote:
> Would it be useful to implement some sort of buffer pool for
> StringBuilders and ByteBuffers? Could likely copy code from netty's
> util library (ByteBuf et al.) or reuse stuff from commons-pool if
> needed. This would work properly in applications, servlets, and even
> reactive streams and lightweight threads later on.
Would you mind elaborating a little bit more on the idea you have in
mind, please? To get the discussion going, I have the following draft:
public interface ObjectPool<V> {
V acquire();
void release(V instance);
}
public interface ObjectPoolFactory {
// For char[], byte[], ByteBuffer, etc. (Types that cannot get
extended implicitly.)
ObjectPool<V> create(Class<V> clazz, Supplier<V> objectFactory);
// For StringBuilder, etc. (Types that can get extended implicitly.)
ObjectPool<V> share(Class<V> clazz);
}
One can pretty efficiently implement such an ObjectPool<V>, e.g., via
a JCTools[1] MPMC queue. Though note that object pools necessitate
manual object release, which is not the case for TLA-provided objects.
Providing a shared object pool factory to the rest of the code base
might need a little bit more thinking.
Exposing configuration knobs to enforce certain limits on the pool and
its factory is also a question that needs to be addressed.
[1] https://github.com/JCTools/JCTools/