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. > * JIT StringBuilder concat optimizations prefer consecutive append calls > withot interleaving code / conditionals > * 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. > > Working on this PR revealed that current tests miss coverage for the case > where a query or ref component is the empty string. Some new test cases are > added to `Constructor.java`. Otherwise, `URL::toString` seems well tested by > current tests. > > Performance refactoring, `noreg-perf`. This pull request has now been integrated. Changeset: 0379c0b0 Author: Eirik Bjørsnøs <[email protected]> URL: https://git.openjdk.org/jdk/commit/0379c0b005f4e99cb0f22ef6c43608697e805422 Stats: 124 lines in 3 files changed: 115 ins; 2 del; 7 mod 8379557: Further optimize URL.toExternalForm Reviewed-by: vyazici ------------- PR: https://git.openjdk.org/jdk/pull/30151
