On Tue, 3 Mar 2026 00:41:42 GMT, Liam Miller-Cushon <[email protected]> wrote:
>> This implements an API to return the byte length of a String encoded in a >> given charset. See >> [JDK-8372353](https://bugs.openjdk.org/browse/JDK-8372353) for background. >> >> --- >> >> >> Benchmark (encoding) (stringLength) Mode >> Cnt Score Error Units >> StringLoopJmhBenchmark.getBytes ASCII 10 thrpt >> 5 406782650.595 ± 16960032.852 ops/s >> StringLoopJmhBenchmark.getBytes ASCII 100 thrpt >> 5 172936926.189 ± 4532029.201 ops/s >> StringLoopJmhBenchmark.getBytes ASCII 1000 thrpt >> 5 38830681.232 ± 2413274.766 ops/s >> StringLoopJmhBenchmark.getBytes ASCII 100000 thrpt >> 5 458881.155 ± 12818.317 ops/s >> StringLoopJmhBenchmark.getBytes LATIN1 10 thrpt >> 5 37193762.990 ± 3962947.391 ops/s >> StringLoopJmhBenchmark.getBytes LATIN1 100 thrpt >> 5 55400876.236 ± 1267331.434 ops/s >> StringLoopJmhBenchmark.getBytes LATIN1 1000 thrpt >> 5 11104514.001 ± 41718.545 ops/s >> StringLoopJmhBenchmark.getBytes LATIN1 100000 thrpt >> 5 182535.414 ± 10296.120 ops/s >> StringLoopJmhBenchmark.getBytes UTF16 10 thrpt >> 5 113474681.457 ± 8326589.199 ops/s >> StringLoopJmhBenchmark.getBytes UTF16 100 thrpt >> 5 37854103.127 ± 4808526.773 ops/s >> StringLoopJmhBenchmark.getBytes UTF16 1000 thrpt >> 5 4139833.009 ± 70636.784 ops/s >> StringLoopJmhBenchmark.getBytes UTF16 100000 thrpt >> 5 57644.637 ± 1887.112 ops/s >> StringLoopJmhBenchmark.getBytesLength ASCII 10 thrpt >> 5 946701647.247 ± 76938927.141 ops/s >> StringLoopJmhBenchmark.getBytesLength ASCII 100 thrpt >> 5 396615374.479 ± 15167234.884 ops/s >> StringLoopJmhBenchmark.getBytesLength ASCII 1000 thrpt >> 5 100464784.979 ± 794027.897 ops/s >> StringLoopJmhBenchmark.getBytesLength ASCII 100000 thrpt >> 5 1215487.689 ± 1916.468 ops/s >> StringLoopJmhBenchmark.getBytesLength LATIN1 10 thrpt >> 5 221265102.323 ± 17013983.056 ops/s >> StringLoopJmhBenchmark.getBytesLength LATIN1 100 thrpt >> 5 137617873.887 ± 5842185.781 ops/s >> StringLoopJmhBenchmark.getBytesLength LATIN1 1000 thrpt >> 5 92540259.1... > > Liam Miller-Cushon has updated the pull request with a new target base due to > a merge or a rebase. The incremental webrev excludes the unrelated changes > brought in by the merge/rebase. The pull request contains 25 additional > commits since the last revision: > > - Merge remote-tracking branch 'origin/master' into strlen > - Update copyright year, and add bug number > - Merge remote-tracking branch 'origin/master' into strlen > - Rename to encodedLength > - Rename to getEncodedLength > - Merge remote-tracking branch 'origin/master' into strlen > - Rename getBytesLength to getByteLength > - Update javadoc to refer to 'this {@code String}', not 'the given String' > - Clarify that "It" in the javadoc means "This method" > - Remove paragraph break > - ... and 15 more: https://git.openjdk.org/jdk/compare/9687b8a3...d0301f0b src/java.base/share/classes/java/lang/String.java line 2114: > 2112: * > 2113: * @apiNote This method provides equivalent or better performance > than {@link #getBytes(Charset) > 2114: * getBytes(cs).length}. This method may allocate memory > to compute the length for some charsets. I think it would be better to drop "This method may allocate memory to compute the length for some charsets" from the apiNote. Just looks very out of place in String docs that never speak of memory usage. src/java.base/share/classes/java/lang/String.java line 2119: > 2117: * @since 27 > 2118: */ > 2119: public int encodedLength(Charset cs) { I see the method name has changed from early iterations. Thanks Eirik Bjørsnøs for asking good questions on this point. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/28454#discussion_r2876638573 PR Review Comment: https://git.openjdk.org/jdk/pull/28454#discussion_r2876643192
