Thanks Peter, this is a nice improvement. I’ll incorporate your changes before pushing. -Chris. On 5 Feb 2014, at 16:39, Peter Levart <peter.levart@gmail.com> wrote:
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