Reuse the StringUTF16::putCharsSB method instead of the Intrinsic in the StringUTF16::toBytes
jaikiran.pai at oracle.com
jaikiran.pai at oracle.com
Wed Jul 30 15:40:32 UTC 2025
I'll let others knowledgeable in this area to comment and provide inputs
to this proposal. I just want to say thank you for bringing up this
discussion to the mailing list first, providing the necessary context
and explanation and seeking feedback, before creating a JBS issue or a
RFR PR.
-Jaikiran
On 30/07/25 7:48 pm, wenshao wrote:
> In the discussion of `8355177: Speed up StringBuilder::append(char[])
> via Unsafe::copyMemory` (https://github.com/openjdk/jdk/pull/24773),
> @liach (Chen Liang) suggested reusing the StringUTF16::putCharsSB
> method introduced in PR #24773 instead of the Intrinsic implementation
> in the StringUTF16::toBytes method.
>
> Original:
> ```java
> @IntrinsicCandidate
> public static byte[] toBytes(char[] value, int off, int len) {
> byte[] val = newBytesFor(len);
> for (int i = 0; i < len; i++) {
> putChar(val, i, value[off]);
> off++;
> }
> return val;
> }
> ```
>
> After:
> ```java
> public static byte[] toBytes(char[] value, int off, int len) {
> byte[] val = (byte[])
> Unsafe.getUnsafe().allocateUninitializedArray(byte.class,
> newBytesLength(len));
> putCharsSB(val, 0, value, off, off + len);
> return val;
> }
> ```
>
> This replacement does not degrade performance. Running
> StringConstructor.newStringFromCharsMixedBegin verified that
> performance is consistent with the original on x64 and slightly
> improved on aarch64.
>
> The implementation after replacing the Intrinsic implementation
> removed 100 lines of C++ code, leaving only Java and Unsafe code, no
> Intrinsic or C++ code, which makes the code more maintainable.
>
> I've submitted a draft PR https://github.com/openjdk/jdk/pull/26553 ,
> please give me some feedback.
> -
> Shaojin Wen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/core-libs-dev/attachments/20250730/7d81297b/attachment.htm>
More information about the core-libs-dev
mailing list