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
