public static Object fastInvoke(Object obj,String methodName,Class<?>[] parameterTypes,Object[] args){
  Class<?> clazz=obj.getClass();
  FastClass fastClass=fastClassCache.get(clazz);
  if (fastClass == null) {
    FastClass newFastClass=FastClass.create(clazz);
    fastClass=fastClassCache.putIfAbsent(clazz,newFastClass);
    if (fastClass == null) {
      fastClass=newFastClass;
    }
  }
  Object value=null;
  try {
    value=fastClass.invoke(methodName,parameterTypes,obj,args);
  }
 catch (  InvocationTargetException e) {
    JUnsafe.throwException(e);
  }
  return value;
}

public static Object fastInvoke ( Object obj , String methodName , Class < ? > [ ] parameterTypes , Object [ ] args ) { Class < ? > clazz = obj . getClass ( ) ; FastClass fastClass = fastClassCache . get ( clazz ) ; if ( fastClass == null ) { FastClass newFastClass = FastClass . create ( clazz ) ; fastClass = fastClassCache . putIfAbsent ( clazz , newFastClass ) ; if ( fastClass == null ) { fastClass = newFastClass ; } } Object value = null ; try { value = fastClass . invoke ( methodName , parameterTypes , obj , args ) ; } catch ( InvocationTargetException e ) { JUnsafe . throwException ( e ) ; } return value ; }
invokes the underlying method , fast invoke using cglib ' s fastclass .
