From c08633cad7a5da41021f914de794544094a4e26f Mon Sep 17 00:00:00 2001 From: igerasim Date: Wed, 2 Jan 2019 15:33:32 -0800 Subject: [PATCH] 6996807: FieldReflectorKey hash code computation can be improved Reviewed-by: rriggs --- src/share/classes/java/io/ObjectStreamClass.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/share/classes/java/io/ObjectStreamClass.java b/src/share/classes/java/io/ObjectStreamClass.java index bcbbea261..a2181c609 100644 --- a/src/share/classes/java/io/ObjectStreamClass.java +++ b/src/share/classes/java/io/ObjectStreamClass.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -2371,7 +2371,7 @@ public class ObjectStreamClass implements Serializable { */ private static class FieldReflectorKey extends WeakReference> { - private final String sigs; + private final String[] sigs; private final int hash; private final boolean nullClass; @@ -2380,13 +2380,13 @@ public class ObjectStreamClass implements Serializable { { super(cl, queue); nullClass = (cl == null); - StringBuilder sbuf = new StringBuilder(); - for (int i = 0; i < fields.length; i++) { + sigs = new String[2 * fields.length]; + for (int i = 0, j = 0; i < fields.length; i++) { ObjectStreamField f = fields[i]; - sbuf.append(f.getName()).append(f.getSignature()); + sigs[j++] = f.getName(); + sigs[j++] = f.getSignature(); } - sigs = sbuf.toString(); - hash = System.identityHashCode(cl) + sigs.hashCode(); + hash = System.identityHashCode(cl) + Arrays.hashCode(sigs); } public int hashCode() { @@ -2404,7 +2404,7 @@ public class ObjectStreamClass implements Serializable { return (nullClass ? other.nullClass : ((referent = get()) != null) && (referent == other.get())) && - sigs.equals(other.sigs); + Arrays.equals(sigs, other.sigs); } else { return false; } -- GitLab