8248233: Avoid superfluous Class::isRecord invocations during deserialization

Co-authored-by: Peter Levart <peter.levart@gmail.com>
Reviewed-by: redestad, plevart
This commit is contained in:
Chris Hegarty 2020-06-25 09:54:19 +01:00
parent 34755c3528
commit 42d3bad0b1
2 changed files with 6 additions and 13 deletions

View file

@ -2139,11 +2139,6 @@ public class ObjectInputStream
return result; return result;
} }
@SuppressWarnings("preview")
private static boolean isRecord(Class<?> cls) {
return cls.isRecord();
}
/** /**
* Reads and returns "ordinary" (i.e., not a String, Class, * Reads and returns "ordinary" (i.e., not a String, Class,
* ObjectStreamClass, array, or enum constant) object, or null if object's * ObjectStreamClass, array, or enum constant) object, or null if object's
@ -2182,7 +2177,7 @@ public class ObjectInputStream
handles.markException(passHandle, resolveEx); handles.markException(passHandle, resolveEx);
} }
final boolean isRecord = cl != null && isRecord(cl); final boolean isRecord = desc.isRecord();
if (isRecord) { if (isRecord) {
assert obj == null; assert obj == null;
obj = readRecord(desc); obj = readRecord(desc);

View file

@ -747,13 +747,6 @@ public class ObjectStreamClass implements Serializable {
} }
this.cl = cl; this.cl = cl;
if (cl != null) {
this.isRecord = isRecord(cl);
// canonical record constructor is shared
this.canonicalCtr = osc.canonicalCtr;
// cache of deserialization constructors is shared
this.deserializationCtrs = osc.deserializationCtrs;
}
this.resolveEx = resolveEx; this.resolveEx = resolveEx;
this.superDesc = superDesc; this.superDesc = superDesc;
name = model.name; name = model.name;
@ -770,6 +763,11 @@ public class ObjectStreamClass implements Serializable {
if (osc != null) { if (osc != null) {
localDesc = osc; localDesc = osc;
isRecord = localDesc.isRecord;
// canonical record constructor is shared
canonicalCtr = localDesc.canonicalCtr;
// cache of deserialization constructors is shared
deserializationCtrs = localDesc.deserializationCtrs;
writeObjectMethod = localDesc.writeObjectMethod; writeObjectMethod = localDesc.writeObjectMethod;
readObjectMethod = localDesc.readObjectMethod; readObjectMethod = localDesc.readObjectMethod;
readObjectNoDataMethod = localDesc.readObjectNoDataMethod; readObjectNoDataMethod = localDesc.readObjectNoDataMethod;