On Tue, 19 Aug 2025 14:33:54 GMT, Roger Riggs <rri...@openjdk.org> wrote:
>> src/java.base/share/classes/java/util/zip/ZipCoder.java line 283: >> >>> 281: // We use the JLA.newStringUTF8NoRepl variant to throw >>> 282: // exceptions eagerly when opening ZipFiles >>> 283: return hash(toString(a, off, len)); >> >> Earlier, `byte[]` was shared by the `String` instantiated, now it needs to >> be cloned. That is, I presume this to have a performance implication. Was >> this considered? > > It always makes a copy, previously and as refactored. > The trampoline in System.java called into String with noShare = true. > > public String newStringUTF8NoRepl(byte[] bytes, int off, int len) { > return String.newStringUTF8NoRepl(bytes, off, len, true); > } > > Now the copy is explicitly done by the caller and the contract is clear that > the buffer is always not shared but transferred. (and one less argument and > conditional) Right. Apparently I was completely lost while trying to follow that double-negation (i.e., `noShare = true`) logic. Thanks so much for the elaborate explanation. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/26822#discussion_r2285924877