RFR (XS): 8141677: Improve java.lang.invoke.MemberName hashCode implementation
Vladimir Ivanov
vladimir.x.ivanov at oracle.com
Mon Nov 9 11:33:36 UTC 2015
Claes,
If you want to avoid Byte$ByteCache initialization, don't you achieve
the same just by wrapping reference kind manually [1]?
Regarding getting rid of varags method call (Objects.hashCode), do you
see any measurable improvements? I'm reluctant to see such changes
(manual method body inlining) unless the affected code is really hot.
Best regards,
Vladimir Ivanov
[1] diff --git
a/src/java.base/share/classes/java/lang/invoke/MemberName.java
b/src/java.base/share/classes/java/lang/invoke/MemberName.java
--- a/src/java.base/share/classes/java/lang/invoke/MemberName.java
+++ b/src/java.base/share/classes/java/lang/invoke/MemberName.java
@@ -694,7 +694,7 @@
@Override
public int hashCode() {
- return Objects.hash(clazz, getReferenceKind(), name, getType());
+ return Objects.hash(clazz, new Byte(getReferenceKind()), name,
getType());
}
@Override
public boolean equals(Object that) {
On 11/8/15 3:30 PM, Claes Redestad wrote:
> Hi,
>
> MemberName::hashCode is exercised during startup of jake, and is
> currently implemented using Objects.hash(...), which allocates Object[]s
> and boxes bytes.
>
> Inlining this makes this slightly more efficient before the JIT kicks
> in, but more measurably allows initialization of Byte$ByteCache to be
> deferred from startup:
>
> bug: https://bugs.openjdk.java.net/browse/JDK-8141677
> webrev: http://cr.openjdk.java.net/~redestad/8141677/webrev.01/
>
> /Claes
More information about the core-libs-dev
mailing list