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.lev...@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 >