I am wondering if there are any additional optimizations I can implement to improve the speed of reflective invocations in Java. Not that the performance is prohibitive, but I get the willies when thinking about some piece of code in a library I am writing being implemented in a tight loop somewhere.
Consider a utility method to invoke reflectively:
public static Object invoke(Object targetObject, String methodName, Object arguments, Class<?> signature)
return method.invoke(targetObject, arguments);
The comments below relate to Sun's implementation, in particular OpenJDK 6. Your mileage may vary with other Java platform implementations.
java.lang.Class does some caching itself, so implementing your own cache may not improve things very much. Do timing tests with and without manual caching.
The actual invocation mechanism is optimised too. The first 15 runs (by default) of your reflected method is called using JNI; after that, bytecode is generated and calling that reflected method would perform identically to calling that method directly in Java code.