RFR: 8344668: Unnecessary array allocations and copying in TextLine [v3]

Daniel Gredler dgredler at openjdk.org
Thu Dec 5 20:27:16 UTC 2024


> When `LineBreakMeasurer` is used to break text into lines, internally it uses `TextMeasurer` and `TextLine` to do the job. In the common case, `TextLine.getComponents(...)` allocates a `TextLineComponent[]` with room for a single array entry, and passes it to `TextLine.createComponentsOnRun(...)`, which fills the array and returns it, optionally resizing to a larger array if necessary, after which the array is resized back down to actual size (if necessary).
> 
> Unfortunately `TextLine.createComponentsOnRun(...)` is too eager in allocating larger arrays. In the most common case of a single component, this means that a single-element array is allocated, then a 9-element array is allocated (via `expandArray(...)`), and then another single-element array is allocated (to shrink the array back to actual size). Only one array allocation is necessary in this common case, and no array copying is needed.

Daniel Gredler has updated the pull request incrementally with one additional commit since the last revision:

  Update copyright year

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/22288/files
  - new: https://git.openjdk.org/jdk/pull/22288/files/4ca6782f..557a3b18

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=22288&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=22288&range=01-02

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/22288.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/22288/head:pull/22288

PR: https://git.openjdk.org/jdk/pull/22288


More information about the client-libs-dev mailing list