Skip to content

perf(io): avoid redundant codec and byte-buffer allocations - #1698

Open
oxura wants to merge 1 commit into
bendlang:mainfrom
oxura:perf/io-buffer-allocation-20261018
Open

oxura wants to merge 1 commit into
bendlang:mainfrom
oxura:perf/io-buffer-allocation-20261018

Conversation

@oxura

@oxura oxura commented Oct 18, 2026

Copy link
Copy Markdown
Contributor

Fixes #1695, #1696 and #1697.

The JS I/O helpers now lazily reuse their UTF-8 codecs and convert byte lists directly into one owned buffer, without the intermediate number array. Byte validation still completes before writing; each text read still decodes independently. UDP receive capacity is bounded by the IPv4 payload limit rather than an arbitrarily larger caller limit. All four receive variants share the same bound; zero and smaller positive limits keep their existing behavior.

Local Bun 1.3.13/Linux x86-64 medians from seven warmed, interleaved runs of the actual emitted helpers:

Work Before After
100,000 UTF-8 encodes 22.182 ms 8.682 ms
100,000 UTF-8 decodes 25.847 ms 13.529 ms
20 conversions of a 100,000-byte list 13.575 ms 8.171 ms

These are helper timings, not disk/network throughput claims. The separate allocation probes and raw measurements are described in the linked reports.

Ran seven real file/socket programs on both Bun and native C: all 14 outputs matched, including malformed UTF-8/BOM boundaries, all byte values, shared-list preservation, invalid-write rejection, empty datagrams, truncation, and zero-limit failures. Both backends also received the exact largest legal IPv4 UDP payload, including its final TAIL marker, with max=4294967295. Repository gate: 54/54. Added behavioral UTF-8 chunk and UDP capacity regressions; no source-text/allocation-count pins.

No public API, parser, kernel, token cap or CHANGELOG changes. No mini-cluster, Metal or CUDA run. AI-assisted.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

UDP receive buffers grow beyond the maximum IPv4 payload

1 participant