- Unsafe API: A key/value Oak buffer will always return the exact same buffer instance in both read and write modes.
- Builder: Allow the user to suggest a preferred block size to be used by Oak's allocator.
- Validation: Increase robustness by validating that the block is sufficient for the required size of the value.
- Fixed bad key initialization in the stream iterators with boundaries.
- Update the copyright statement
- Keys Disaggregation: Make chunks only reference the keys, thus keys are not copied during the rebalance. Improving the rebalance and ingestion performance.
- Stream Scans: Gives a "stream" view on the elements, meaning only one element can be observed at a time. It greatly improves the scan performance due to objects’ re-usage.
- Removing Handles: Make chunks reference to the off-heap buffers directly, with synchronization and memory managing data moved to the buffer header. Memory usage decreased by one third.
- Memory Management: Following removing handles, the memory management is not based on the handle lock, and headers can be fully reusable (no internal fragmentation). Better memory utilization.
- Descending Scan Stack Refill Optimization: Fix the bug of refilling the scan stack with the same element more than once. Keys got compared by their indexes and not values. This improves the descending scan performance.
- Refactoring for future OakHash: EntrySet class is introduced to encapsulate (1) the entries to integers mapping and (2) managing (allocate/read/write/delete/release) individual key-value entries. Helps in future OakHash coding.
- No internal objects creation: Eliminate ephemeral objects creation in time of lookup. It greatly reduces the work to be done by GC and improves performance.
- Safe/Unsafe API: Create a possibility to work with OakBuffers in a fully safe/protected mode, so no wrong memory can be accessed/written erroneously. Safe mode requires some performance degradation, thus an alternative unsafe mode is introduced, providing greater performance and relying on the correct user actions for the security.
- Improving benchmarks code: Reducing the time it takes to run all benchmarks. Improving the results readability. Improving the benchmark scripts user experience.
- Correctness bug fixes (partial list): in non-zero-copy API, internal memory access, rebalance process.
- Small performance enhancements (partial list): Byte order, stack anchor movement, thread local elimination, thread index calculator improvement.
- Accomplish all ConcurrentNavigableMap API