ObjectIn/OutputStream improvements
Peter Levart
peter.levart at gmail.com
Wed Feb 5 16:39:58 UTC 2014
On 02/05/2014 04:11 PM, Chris Hegarty wrote:
> Thanks stuart, Mike, and Paul.
>
>> - Why not have getClassSignature() return an interned string? (that's if interning is actually essential. Are we sure it's not just overhead?)
> I didn’t want to change the existing use of interning here, just refactor the code a little to make it cleaner.
>
>> I think that would be a better way to spend our performance investigation budget. Thus, it might be better to remove the StringBuilder field from this patch and submit another one focusing on UTF decoding; the other changes in the patch look good.
> Agreed. This could be looked at separately.
>
> Latest webrev:
> http://cr.openjdk.java.net/~chegar/serial_stupp.01/
>
> Thanks,
> -Chris.
Hi Chris,
What about the following even less garbage-producing-and-copying
ObjectStreamClass.get[Class|Method]Signature combo:
/**
* Returns JVM type signature for given class.
*/
static String getClassSignature(Class<?> cl) {
if (cl.isPrimitive())
return getPrimitiveSignature(cl);
else
return appendClassSignature(new StringBuilder(),
cl).toString();
}
private static StringBuilder appendClassSignature(StringBuilder
sbuf, Class<?> cl) {
while (cl.isArray()) {
sbuf.append('[');
cl = cl.getComponentType();
}
if (cl.isPrimitive())
sbuf.append(getPrimitiveSignature(cl));
else
sbuf.append('L').append(cl.getName().replace('.', '/')).append(';');
return sbuf;
}
/**
* Returns JVM type signature for given list of parameters and
return type.
*/
private static String getMethodSignature(Class<?>[] paramTypes,
Class<?> retType)
{
StringBuilder sbuf = new StringBuilder();
sbuf.append('(');
for (int i = 0; i < paramTypes.length; i++) {
appendClassSignature(sbuf, paramTypes[i]);
}
sbuf.append(')');
appendClassSignature(sbuf, retType);
return sbuf.toString();
}
Regards, Peter
More information about the core-libs-dev
mailing list