Releases: intel/qat-java
Release list
Qat-Java 2.5.0
This release redesigns the JNI layer for lower per-call overhead, adds bulk compression APIs, and fixes several correctness issues, particularly around ZSTD and hardware-mode decompression of small frames.
Performance
- Redesigned JNI interface (#25) following OpenJDK's libzip conventions: packed
longresults instead of per-call field callbacks, a thread-local staging buffer to avoid direct ByteBuffer allocations,reachabilityFence()guards, and consolidated JNI entry points. - New
compressFull/decompressFullbulk APIs that process sub-blocks in a single JNI call instead of one call per block.
Bug Fixes
- Fixed intermittent
BufferOverflowExceptionwhen decompressing multi-frame streams; also fixes HARDWARE-mode round-trips of buffers smaller than 1024 bytes. - ZSTD: fixed ByteBuffer position handling and
compressFull/decompressFullreturn values. - ZSTD: compression level is now validated in all constructors and capped at 12 (new
MAX_COMPRESSION_LEVEL_ZSTD). - ZSTD zippers built without an explicit level now default to 3 instead of 6.
⚠️ Behavior change. QatDecompressorInputStream.skip(n)no longer overflows on largenand returns 0 at end of stream instead of -1.decompress(byte[], byte[])throwsIllegalArgumentExceptionfor null arrays instead ofNullPointerException.compressFull's sizes array is validated before reaching native code.bytesRead/bytesWrittenare reset on all failure paths as documented.
API Changes
- Added
QatZipper.compressFull/decompressFullandMAX_COMPRESSION_LEVEL_ZSTD. - Removed
Builder.retryCount(int)andDEFAULT_RETRY_COUNT.⚠️ Breaking change. - The public
zstdCompressCtx/zstdDecompressCtxfields are no longer exposed.
Documentation
- Extensive Javadoc corrections to match actual behavior (ByteBuffer error semantics, stream contracts, buffer-size descriptions).
Build & Tests
- Fixed Spotless compatibility across JDK versions; the library still builds on Java 11+.
- Updated Maven plugin and test dependency versions; fixed a version issue in the JMH benchmark.
- Added regression tests for all fixes.
Full Changelog: v2.4.0...v2.5.0
Qat-Java 2.4.0
Qat-Java 2.4.0 release focuses on performance optimizations, enhanced reliability, and improved observability.
- Optimized skip implementation in
QatDecompressorStreamto improve decompression performance and reduce unnecessary overhead. - Enhanced logging framework with eight distinct log levels for better debugging and operational visibility.
- Improved exception handling in JNI code to increase stability and provide clearer error reporting.
- Separate default compression levels for DEFLATE and ZSTD to ensure more appropriate algorithm-specific tuning.
- Expanded and refined JMH benchmarks for more accurate and comprehensive performance measurement.
- Bug fixes to improve overall robustness and reliability.
Qat-Java 2.2.1
This version does not require the modifyThread permission when operating under a Java SecurityManager. Supports DEFLATE and LZ4.
Qat-Java 2.3.2
Enhances QzSession reuse and eliminates potential data races in concurrent use.
Qat-Java 1.2.0
This version uses QATZip 1.2.0 and does not require a modifyThread permission when running under a Java Security Manager.
Qat-Java 2.3.1
This version eliminates the dependency on GLIBC_2.34, allowing qat-java to run on older systems.
Qat-Java 2.3.0
This version enhances the native library loading mechanism and addresses class loading issues that may arise during unit test execution or at runtime.
Qat-Java 2.2.0
This version enables the use of thread-local cached QAT sessions, removing the reliance on Cleaner or PhantomReference for resource management.
Qat-Java 2.1.0
This version brings a couple of key changes compared to version 2.0.0:
- It now uses Java's
PhantomReferenceandReferenceQueueinstead ofCleanerto handle QAT session cleanup. - It removes the need for an external dependency on QAT-ZSTD.
It also includes improvements to the JMH benchmarks.
Qat-Java 2.0.0
This release includes support for QAT-accelerated Zstandard compression.