Integrated: 8344668: Unnecessary array allocations and copying in TextLine
Daniel Gredler
dgredler at openjdk.org
Fri Dec 6 13:10:48 UTC 2024
On Thu, 21 Nov 2024 00:20:36 GMT, Daniel Gredler <dgredler at openjdk.org> wrote:
> 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.
This pull request has now been integrated.
Changeset: f6021a9c
Author: Daniel Gredler <dgredler at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/f6021a9c34da877bf954f5b90b4233949ec0ffc7
Stats: 3 lines in 1 file changed: 0 ins; 0 del; 3 mod
8344668: Unnecessary array allocations and copying in TextLine
Reviewed-by: honkar, azvegint, prr
-------------
PR: https://git.openjdk.org/jdk/pull/22288
More information about the client-libs-dev
mailing list