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