-
Bug
-
Resolution: Fixed
-
P5
-
23
-
None
-
b02
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.
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.
- links to
-
Commit(master) openjdk/jdk/f6021a9c
-
Review(master) openjdk/jdk/22288