Skip to content

Commit 68eef9f

Browse files
jderegclaude
andcommitted
Update changelog for 4.97.0 with FastReader optimizations
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 1127018 commit 68eef9f

1 file changed

Lines changed: 3 additions & 1 deletion

File tree

changelog.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
### Revision History
22

3-
#### 4.97.0 (Unreleased)
3+
#### 4.97.0 - 2026-03-03
4+
* **PERFORMANCE**: `FastReader.readUntil()` now splits the inner loop into a read-only delimiter scan followed by a bulk `System.arraycopy`, allowing the JIT to optimize the tight scan loop independently from memory writes.
5+
* **PERFORMANCE**: `FastReader.readUntil()` scan loop now uses a `do-while` with a single array access per iteration and hoists position assignment above the delimiter check to eliminate a duplicate write.
46

57
#### 4.96.0 - 2026-02-28
68
* **BUG FIX**: `ClassUtilities.trySetAccessible()` no longer caches successful `setAccessible(true)` results. The `WeakHashMap`-based cache uses `equals()` for lookup, but `Field.equals()` matches by declaring class, name, and type — not identity. When `getDeclaredFields()` was called with different predicates, the JVM returned different `Field` instances for the same logical field; the cache returned `TRUE` for the second instance without ever calling `setAccessible(true)` on it, leaving it inaccessible. This caused `Traverser` to silently skip inaccessible fields, breaking `GraphComparator.applyDelta()`. Only failures (`FALSE`) are now cached to avoid expensive repeated exceptions on JPMS-sealed modules.

0 commit comments

Comments
 (0)