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.

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

Commit messages:
 - fix checkstyle
 - Remove CASE_DIFF
 - update SurrogatePairs test
 - fix SurrogatePairs test
 - update SurrogatePairs test
 - fix Decoder test
 - fix encode surrogate pair
 - fix comment
 - Optimize URLEncoder

Changes: https://git.openjdk.org/jdk/pull/15354/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=15354&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8314774
  Stats: 237 lines in 2 files changed: 99 ins; 74 del; 64 mod
  Patch: https://git.openjdk.org/jdk/pull/15354.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/15354/head:pull/15354

PR: https://git.openjdk.org/jdk/pull/15354

Reply via email to