Skip to content

Commit 44bd72a

Browse files
Annie LiangCopilot
andcommitted
docs: fix JFR table - explain ValueIterator on request vs response path
The c16 PR showing HashMap\ is from the request-sending path (ReactorNettyClient.bodySendDelegate iterating request headers), NOT the response-side asMap() iterator we eliminated. Added clarifying note and removed the per-config ValueIterator column (too noisy). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 240fa86 commit 44bd72a

1 file changed

Lines changed: 26 additions & 24 deletions

File tree

sdk/cosmos/azure-cosmos/benchmark-results/PR-DESCRIPTION.md

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -99,30 +99,32 @@ GC behavior is identical between branches. At single-tenant scale with an 8 GB h
9999

100100
#### JFR Allocation Comparison -- All Configs
101101

102-
`ObjectAllocationSample` comparison for the key targeted class `HashMap$ValueIterator` and aggregate allocation share of all 9 targeted classes. JFR uses statistical sampling so per-config numbers have inherent noise, but the directional trends are consistent.
103-
104-
| Config | main targeted % | hashmap-alloc targeted % | Delta (pp) | HashMap$ValueIterator |
105-
|--------|:-:|:-:|:-:|:-:|
106-
| c1-Read/http1 | 11.7% | 14.4% | +2.7 | main: 0.0% / PR: 0% |
107-
| c8-Read/http1 | 22.7% | 10.6% | -12.1 | main: 0.0% / PR: 0% |
108-
| c16-Read/http1 | 9.2% | 14.1% | +4.9 | main: 0.0% / PR: 1.2% |
109-
| c32-Read/http1 | 11.2% | 12.8% | +1.7 | main: 0.0% / PR: 0% |
110-
| c128-Read/http1 | 20.4% | 17.4% | -3.0 | main: 1.3% / PR: eliminated |
111-
| c1-Read/http2 | 11.4% | 10.4% | -1.1 | main: 0.0% / PR: 0% |
112-
| c8-Read/http2 | 11.9% | 7.1% | -4.8 | main: 0.0% / PR: 0% |
113-
| c16-Read/http2 | 9.1% | 9.0% | -0.1 | main: 0.0% / PR: 0% |
114-
| c32-Read/http2 | 14.6% | 10.5% | -4.1 | main: 0.0% / PR: 0% |
115-
| c128-Read/http2 | 16.9% | 15.7% | -1.1 | main: 0.0% / PR: 0% |
116-
| c1-Write/http1 | 11.2% | 3.5% | -7.7 | main: 0.0% / PR: 0% |
117-
| c8-Write/http1 | 15.2% | 20.3% | +5.0 | main: 0.0% / PR: 0% |
118-
| c16-Write/http1 | 8.0% | 17.2% | +9.2 | main: 0.0% / PR: 0% |
119-
| c32-Write/http1 | 17.7% | 22.2% | +4.5 | main: 0.0% / PR: 0% |
120-
| c128-Write/http1 | 16.5% | 10.1% | -6.5 | main: 0.0% / PR: 0% |
121-
| c1-Write/http2 | 9.1% | 6.2% | -2.9 | main: 0.0% / PR: 0% |
122-
| c8-Write/http2 | 15.7% | 18.7% | +2.9 | main: 0.0% / PR: 0% |
123-
| c16-Write/http2 | 16.0% | 12.3% | -3.7 | main: 0.0% / PR: 0% |
124-
| c32-Write/http2 | 18.0% | 11.8% | -6.2 | main: 0.0% / PR: 0% |
125-
| c128-Write/http2 | 8.5% | 13.1% | +4.6 | main: 0.0% / PR: 0% |
102+
`ObjectAllocationSample` comparison for aggregate allocation share of all 9 targeted classes. JFR uses statistical sampling so per-config numbers have inherent noise, but the directional trends are consistent.
103+
104+
> **Note on `HashMap$ValueIterator`**: This PR eliminates the **response-side** `HttpUtils.asMap()` iterator (creating throwaway HashMap copies of response headers). A separate `HashMap$ValueIterator` still exists on the **request-sending side** (`ReactorNettyClient.bodySendDelegate` iterating request headers to write to the wire) -- this is expected and not targeted by this PR. JFR may sample either call site, so occasional non-zero values in the PR column reflect the request-side iterator, not a regression.
105+
106+
| Config | main targeted % | hashmap-alloc targeted % | Delta (pp) |
107+
|--------|:-:|:-:|:-:|
108+
| c1-Read/http1 | 11.7% | 14.4% | +2.7 |
109+
| c8-Read/http1 | 22.7% | 10.6% | -12.1 |
110+
| c16-Read/http1 | 9.2% | 14.1% | +4.9 |
111+
| c32-Read/http1 | 11.2% | 12.8% | +1.7 |
112+
| c128-Read/http1 | 20.4% | 17.4% | -3.0 |
113+
| c1-Read/http2 | 11.4% | 10.4% | -1.1 |
114+
| c8-Read/http2 | 11.9% | 7.1% | -4.8 |
115+
| c16-Read/http2 | 9.1% | 9.0% | -0.1 |
116+
| c32-Read/http2 | 14.6% | 10.5% | -4.1 |
117+
| c128-Read/http2 | 16.9% | 15.7% | -1.1 |
118+
| c1-Write/http1 | 11.2% | 3.5% | -7.7 |
119+
| c8-Write/http1 | 15.2% | 20.3% | +5.0 |
120+
| c16-Write/http1 | 8.0% | 17.2% | +9.2 |
121+
| c32-Write/http1 | 17.7% | 22.2% | +4.5 |
122+
| c128-Write/http1 | 16.5% | 10.1% | -6.5 |
123+
| c1-Write/http2 | 9.1% | 6.2% | -2.9 |
124+
| c8-Write/http2 | 15.7% | 18.7% | +2.9 |
125+
| c16-Write/http2 | 16.0% | 12.3% | -3.7 |
126+
| c32-Write/http2 | 18.0% | 11.8% | -6.2 |
127+
| c128-Write/http2 | 8.5% | 13.1% | +4.6 |
126128

127129
> **Note on JFR sampling noise**: `ObjectAllocationSample` is a statistical sampler -- individual per-config percentages can swing +/-5pp between runs. The consistently observable patterns are:
128130
> 1. **`HashMap$ValueIterator` is eliminated** in most configs (the `asMap()` round-trip is removed)

0 commit comments

Comments
 (0)