On Fri, 19 Apr 2024 13:23:53 GMT, Claes Redestad <redes...@openjdk.org> wrote:
> We can reduce overhead of first use of a switch bootstrap by moving > `typePairToName` into `TypePairs` and by explicitly overriding `hashCode` and > `equals`. The first change avoids loading and initializing the `TypePairs` > class in actual cases, the second remove some excess code generation from > happening on first use. src/java.base/share/classes/java/lang/runtime/SwitchBootstraps.java line 685: > 683: record TypePairs(Class<?> from, Class<?> to) { > 684: > 685: private static final Map<TypePairs, String> typePairToName = > initialize(); If `TypePairs.typePairToName` is never modified after initialisation, then it should probably be made immutable: Suggestion: private static final Map<TypePairs, String> typePairToName = Map.copyOf(initialize()); src/java.base/share/classes/java/lang/runtime/SwitchBootstraps.java line 699: > 697: > 698: public boolean equals(Object other) { > 699: if (other instanceof TypePairs otherPair) { To match the behaviour of the `equals` method body generated by `java.lang.runtime.ObjectMethods::bootstrap`, this should include a fast path check for `this == other`: Suggestion: if (this == other) { return true; } if (other instanceof TypePairs otherPair) { ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/18865#discussion_r1573061423 PR Review Comment: https://git.openjdk.org/jdk/pull/18865#discussion_r1573059594