On Mon, 9 Mar 2026 21:01:56 GMT, Eirik Bjørsnøs <[email protected]> wrote:
> This PR optimizes string concatenation in `URL::toExternalForm`. This method > is called by `URL:toString` and executes often enough to be noticed during > startup / classloading profiling. It was previously optimized in JDK 10 via > JDK-8193034, but we can do more. > > Key observations: > > * The current method concatenates concatenated strings. We can get away with > less by flattening and concatenating once per call. > * The current method does not take advantage of the fact that most URL > components are optional and several are commonly not present. We can > specialize for those cheaper common concatenations. > > This PR reduces runtime with 60% or more, depending on present URL > components. (Benchmark results in first comment). I also ran the benchmark > with compilation excluded and found no regressions for the interpreter case. > > Reviewers may find that the use of SSA-style local variables and the > optimizations makes the code less dense and more verbose. I opted to not try > to be clever and instead let the code "show its work" here. The code is more > bulky, but hopefully should be easy to read. I added some code comments, > happy to dial down those if requested. Feedback welcome! > > Performance refactoring, `noreg-perf`. `URL::toString` seems well tested by > current tests. Performance results: Baseline: Benchmark (auth) (query) (ref) Mode Cnt Score Error Units URLToString.urlToString false false false avgt 15 54,344 ± 2,856 ns/op URLToString.urlToString false false true avgt 15 92,925 ± 3,976 ns/op URLToString.urlToString false true false avgt 15 86,129 ± 0,727 ns/op URLToString.urlToString false true true avgt 15 107,747 ± 6,620 ns/op URLToString.urlToString true false false avgt 15 68,900 ± 2,452 ns/op URLToString.urlToString true false true avgt 15 100,402 ± 1,416 ns/op URLToString.urlToString true true false avgt 15 107,148 ± 4,950 ns/op URLToString.urlToString true true true avgt 15 120,624 ± 2,909 ns/op PR: Benchmark (auth) (query) (ref) Mode Cnt Score Error Units URLToString.urlToString false false false avgt 15 20,443 ± 0,745 ns/op URLToString.urlToString false false true avgt 15 27,122 ± 0,340 ns/op URLToString.urlToString false true false avgt 15 28,650 ± 0,521 ns/op URLToString.urlToString false true true avgt 15 37,867 ± 2,050 ns/op URLToString.urlToString true false false avgt 15 26,757 ± 0,273 ns/op URLToString.urlToString true false true avgt 15 37,808 ± 0,520 ns/op URLToString.urlToString true true false avgt 15 37,319 ± 2,002 ns/op URLToString.urlToString true true true avgt 15 45,303 ± 1,551 ns/op ------------- PR Comment: https://git.openjdk.org/jdk/pull/30151#issuecomment-4026932090
