This document summarises tagged Java-Thread-Affinity releases from 2020-01-01 onwards, using the annotated Git tag dates and the commit history available on 2026-04-28.
Both legacy affinity- tags and Java-Thread-Affinity- tags are included where they fall in that window.
The emphasis is on user-visible behaviour, compatibility, dependency alignment, and operational impact.
Early-access releases are marked with ea in the version name.
The type marker uses ASCII rather than emoji to stay within the repository character-set policy:
-
[F] Functional- API, runtime behaviour, operating-system support, diagnostics, or lock semantics changed. -
[N] Non-functional- release alignment, dependency alignment, build, documentation, test, or metadata changes only.
-
The latest tagged release in this window is
Java-Thread-Affinity-2026.2. It is primarily a Maven/BOM alignment release over2026.1. -
There are unreleased branch updates after
Java-Thread-Affinity-2026.2. The maindevelop/ealine only contains the post-release snapshot reset; separate feature and documentation branches contain JUnit 5 migration work and documentation clean-up. -
The main functional upgrade path after
3.23.xis the3.26/3.27/2026.xline. That line improves modern Java support, CPU id validation, hyper-thread sibling handling foracquireCore(), diagnostics, and test coverage. -
AffinitySupportwas removed after the3.23.xline. Applications still importingnet.openhft.affinity.AffinitySupportshould call the corresponding methods onnet.openhft.affinity.Affinitybefore upgrading to3.26.xor later. -
Custom
LockCheckerimplementations should implementobtainLock(int id, int id2, String metaInfo). The older one-id overload was deprecated in the3.27ea1line so a physical core can reserve more than one logical CPU when hyper-threading is present. -
Locking behaviour became safer across the 2020-2022 releases. Notable changes include releasing an
AffinityLockwithout resetting the current thread, avoiding release of locks held by other processes, improving lock metadata under contention, handlingOverlappingFileLockException, and handling interruptedacquireLock()calls. -
Platform and topology support broadened over the same period. The releases added or improved ppc64le support, ARM 32-bit and 64-bit
rdtsc, more-than-64-core reserved masks, offline CPU handling, unusual/proc/cpuinfohandling, no-affinity environments, and Windows affinity-mask failure diagnostics. -
JNA handling changed materially over this period: the project moved to newer JNA releases and later added a minimum JNA major-version check. Users with constrained or old operating-system images should verify the bundled or installed JNA version when upgrading.
-
CPU selection became more explicit and easier to diagnose. The release history includes explicit CPU-list acquisition, descriptive core names for
MicroJitterSampler, support for very small CPU-count systems, lower-noise warnings, and clearer invalid CPU id logging.
These entries are based on remote branches visible on 2026-04-28. They are not published release artefacts and may change before the next tag.
| Date | Ref | Main change | Benefit / impact |
|---|---|---|---|
2026-04-18 |
[N] Non-functional
|
Documentation-only branch set covering branch-reference updates, broken URL replacement, HTTPS link upgrades, typo fixes, UK English spelling, and copyright-year clean-up. |
Improves documentation accuracy and project consistency. No runtime or API impact. |
2026-03-30 |
[N] Non-functional
|
Migrates tests to JUnit 5, makes Pax Exam migration status explicit, and adjusts temporary-directory cleanup for Windows JNA DLL locking during tests. |
Modernises the test suite and improves cross-platform test reliability. No library runtime behaviour change was identified. |
2026-01-28 |
[N] Non-functional
|
Post-release Maven state reset after |
Keeps the development line ready for the next snapshot cycle. No user-facing behaviour change. |
| Date | Release | Main change | Benefit / impact |
|---|---|---|---|
2026-01-28 |
[N] Non-functional
|
Aligned Maven versions to Chronicle BOM |
Use when aligning with the Chronicle |
2026-01-28 |
[N] Non-functional
|
Aligned Maven versions to Chronicle BOM |
Provides release-train consistency for users consuming the Chronicle |
2026-01-28 |
[F] Functional
|
Moved to calendar versioning and |
Establishes the 2026 baseline for users moving from the latest stable |
2025-07-23 |
[N] Non-functional
|
Stable |
Low-risk update for users staying on the |
2025-07-09 |
[F] Functional
|
Fixed Java 9+ support paths, improved |
Improves correctness on modern JDKs and hyper-threaded hosts. Invalid CPU ids fail earlier, diagnostics are clearer, and custom |
2024-11-15 |
[N] Non-functional
|
Started the |
Useful for consumers testing the next release train. No major functional change over the contemporary |
2024-11-15 |
[N] Non-functional
|
Promoted the |
Stable entry point for the |
2024-10-14 |
[F] Functional
|
Fixed a null-pointer issue and moved to a later |
Improves reliability for users testing the |
2024-07-19 |
[F] Functional
|
Added |
Improves timing support on ARM hosts and reduces unnecessary warning noise during recoverable lock acquisition retries. |
2024-06-15 |
[F] Functional
|
First successful |
Opened the |
2023-01-11 |
[N] Non-functional
|
Updated to later |
Restores a cleaner build/dependency resolution path for |
2022-09-29 |
[N] Non-functional
|
Stabilised the |
Provides a stable dependency baseline for users not taking early-access builds. |
2022-09-07 |
[F] Functional
|
Delayed a warning until an affinity lock is actually used and updated Maven execution tooling. |
Reduces startup noise for applications that include the library but do not immediately bind threads. |
2022-08-08 |
[F] Functional
|
Handled |
Makes interrupted lock acquisition cleaner and avoids abrupt failure when a CPU id cannot be honoured on the current host. |
2022-01-31 |
[F] Functional
|
Added descriptive core-name support for |
Improves targeted jitter sampling and operation on systems with very small CPU counts. |
2021-11-03 |
[F] Functional
|
Handled |
Improves multi-process lock robustness and keeps build/test infrastructure aligned with Chronicle tooling. |
2021-10-28 |
[F] Functional
|
Reworked file-lock metadata handling and multi-process affinity tests around a reproduced lock-handling issue. |
Improves correctness when processes contend for lock metadata and makes failures easier to diagnose. |
2021-10-18 |
[F] Functional
|
Fixed |
Improves lock metadata reliability under contention and reduces cross-platform test noise. |
2021-06-22 |
[F] Functional
|
Updated to JNA |
Improves native-library compatibility and reduces friction when building on Windows. |
2021-06-17 |
[F] Functional
|
Allowed for disabled CPUs, warned when Windows |
Improves correctness on hosts with offline CPUs, makes Windows failures visible, and fixes a thread-factory binding bug. |
2021-06-16 |
[N] Non-functional
|
Release-train/BOM update after |
Dependency alignment release; no substantial user-facing source change was identified. |
2021-05-27 |
[N] Non-functional
|
Republished the Java 12+ compatibility work under the |
Use this rather than |
2021-05-26 |
[F] Functional
|
Removed custom |
Makes the library behave better with Java versions that enforce module boundaries, especially Java 12 and later. |
2021-02-22 |
[N] Non-functional
|
Updated early-access BOM versions, normalised line endings, and restored native Makefile execute permissions in Git. |
Build and packaging clean-up for the |
2021-01-13 |
[F] Functional
|
Started the |
Improves operation on large-core-count and ppc64le systems, and gives callers tighter control over CPU selection. |
2020-09-16 |
[F] Functional
|
Started the |
Useful for consumers following the |
2020-09-16 |
[F] Functional
|
Allowed |
Reduces accidental affinity changes and improves multi-process lock safety. |
2020-04-17 |
[F] Functional
|
Handled no-affinity environments more gracefully and continued when |
Improves startup resilience on containers and virtual machines where CPU topology data is incomplete or non-standard. |
The release history contains several release-train commits whose only effective change is Maven version alignment. Those releases are still listed because they are published artefacts, but their impact is intentionally described as dependency or build alignment rather than runtime behaviour.
When preparing future release notes, prefer summarising user impact rather than copying raw commit subjects. The most useful recurring categories are API compatibility, supported Java versions, supported operating systems, lock-file behaviour, dependency/BOM alignment, and diagnostics.