RFR: 8314774: Optimize URLEncoder

Glavo duke at openjdk.org
Tue Aug 22 20:02:50 UTC 2023


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


More information about the net-dev mailing list