[10] RFR: 8185104: Generate CharacterDataLatin1 lookup tables directly
Xueming Shen
xueming.shen at oracle.com
Tue Jul 25 21:09:40 UTC 2017
+1
On 7/23/17, 6:37 AM, Claes Redestad wrote:
> Hi,
>
> java.lang.CharacterDataLatin1 and others are generated at build time
> by the GenerateCharacter tool, which has a -string mode to generate
> lookup tables as Strings literals rather than arrays directly. This
> serves multiple purposes:
>
> 1. it reduces the size of the generated bytecode, which is necessary
> to keep code below method bytecode limits if the arrays generated are
> very large
> 2. it may under certain circumstances (large enough arrays, JITed
> code) be a performance optimization
>
> While having other performance benefits, the compact strings feature
> that went into 9 made String::toCharArray less friendly to startup,
> and since the same feature means we're now always loading
> CharacterDataLatin1 on bootstrap in all locales it seemed reasonable
> to re-examine whether this class in particular really gains from
> generating its lookup tables via String literals.
>
> Turns out it doesn't. By generating CharacterDataLatin1 tables as
> arrays explicitly:
>
> - executed bytecode drop from 21,782 to 2,077 when initializing this
> class (approximately 2% of executed bytecode; 1.5% of total instructions)
> - slight reduction (~1Kb) in the minimum retained heap usage
> - the size of CharacterDataLatin1.class only grows from 6458 to 7385
> bytes
>
> Proposed patch is to drop passing -string to GenerateCharacter for the
> latin1 case:
>
> Webrev: http://cr.openjdk.java.net/~redestad/8185104/jdk.00/
> Bug: https://bugs.openjdk.java.net/browse/JDK-8185104
>
> Thanks!
>
> /Claes
More information about the core-libs-dev
mailing list