Agrona provides a library of data structures and utility methods that are a common need when building high-performance applications in Java. The sort of things you can find in Agrona are:
- Buffers - Thread safe direct and atomic for working with on and off heap memory with memory ordering semantics.
- Lists - Array backed lists of int/long primitives to avoid boxing.
- Maps - Open addressing and linear probing with int/long primitive keys to object reference values.
- Maps - Open addressing and linear probing with int/long primitive keys to int/long values.
- Sets - Open addressing and linear probing for int/long primitives and object reference values.
- Cache - Set Associative with int/long primitive keys to object reference values.
- Queues - Lock-less implementations for low-latency applications.
- Ring/Broadcast Buffers - implemented off-heap for IPC communication.
- Basic Agent framework.
- Signal handling to support "Ctrl + c" in a server application.
- Scalable Timer Wheel.
- Basic code generation from annotated implementations that can vary on primitive types.
- Off-heap counters implementation for application telemetry.
- Implementations of InputStream and OutputStream that can wrap direct buffers.
- DistinctErrorLog: A log of distinct errors to avoid filling disks with existing logging approaches.