On Thu, 24 Aug 2023 02:15:58 GMT, Glavo <[email protected]> wrote:

>> I mainly made these optimizations:
>> 
>> * Avoid allocating `StringBuilder` when there are no characters in the URL 
>> that need to be encoded;
>> * Implement a fast path for UTF-8.
>> 
>> In addition to improving performance, these optimizations also reduce 
>> temporary objects:
>> 
>> * It no longer allocates any object when there are no characters in the URL 
>> that need to be encoded;
>> * The initial size of StringBuilder is larger to avoid expansion as much as 
>> possible;
>> * For UTF-8, the temporary `CharArrayWriter`, strings and byte arrays are no 
>> longer needed.
>> 
>> The results of the `URLEncodeDecode` benchmark:
>> 
>> 
>> Before:
>> Benchmark                       (count)  (maxLength)  (mySeed)  Mode  Cnt  
>> Score   Error  Units
>> URLEncodeDecode.testEncodeUTF8     1024         1024         3  avgt   15  
>> 5.587 ? 0.010  ms/op
>> 
>> After:
>> Benchmark                       (count)  (maxLength)  (mySeed)  Mode  Cnt  
>> Score   Error  Units
>> URLEncodeDecode.testEncodeUTF8     1024         1024         3  avgt   15  
>> 3.582 ? 0.054  ms/op
>> 
>> 
>> I also updated the tests to add more test cases.
>
> Glavo has updated the pull request incrementally with one additional commit 
> since the last revision:
> 
>   Add @ForceInline

I will extract the logic of encoding UTF-8 to `UTF8EncodeUtils`, and then rerun 
the benchmark:


Baseline:
Benchmark                       (count)  (maxLength)  (mySeed)  Mode  Cnt  
Score   Error  Units
URLEncodeDecode.testEncodeUTF8     1024         1024         3  avgt   15  
5.580 ? 0.008  ms/op

Inline UTF-8 encoding:
Benchmark                       (count)  (maxLength)  (mySeed)  Mode  Cnt  
Score   Error  Units
URLEncodeDecode.testEncodeUTF8     1024         1024         3  avgt   15  
3.546 ? 0.016  ms/op

Use UTF8EncodeUtils:
Benchmark                       (count)  (maxLength)  (mySeed)  Mode  Cnt  
Score   Error  Units
URLEncodeDecode.testEncodeUTF8     1024         1024         3  avgt   15  
3.581 ? 0.064  ms/op


Using `UTF8EncodeUtils` is approximately 1% slower, which is acceptable. I hope 
to use this utility class in more places in the future.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/15354#issuecomment-1690891780

Reply via email to