On Thu, 21 Nov 2024 00:20:36 GMT, Daniel Gredler <[email protected]> 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 <[email protected]>
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

Reply via email to