# HG changeset patch # User igerasim # Date 1546472012 28800 # Node ID b561ea19a7b9eed18842abead8333d0787aeba87 # Parent 3d0f6ef9121647e2e5357677083398189f94b5fc 6996807: FieldReflectorKey hash code computation can be improved Reviewed-by: rriggs diff -r 3d0f6ef91216 -r b561ea19a7b9 src/java.base/share/classes/java/io/ObjectStreamClass.java --- a/src/java.base/share/classes/java/io/ObjectStreamClass.java Wed Jan 02 13:37:55 2019 -0500 +++ b/src/java.base/share/classes/java/io/ObjectStreamClass.java Wed Jan 02 15:33:32 2019 -0800 @@ -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 @@ -2275,7 +2275,7 @@ */ private static class FieldReflectorKey extends WeakReference> { - private final String sigs; + private final String[] sigs; private final int hash; private final boolean nullClass; @@ -2284,13 +2284,13 @@ { 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() { @@ -2308,7 +2308,7 @@ return (nullClass ? other.nullClass : ((referent = get()) != null) && (referent == other.get())) && - sigs.equals(other.sigs); + Arrays.equals(sigs, other.sigs); } else { return false; }