*/
  public static Class forName(String className, boolean initialize, ClassLoader classLoader) throws ClassNotFoundException {    SecurityManager security = System.getSecurityManager();    boolean DEBUG = false;    if (security != null)      throw new VM_UnimplementedError("Classloading with security manager");          if ( (initialize == true) 	 && ( (classLoader == null) 	      || (classLoader instanceof VM_SystemClassLoader) ) ) {	        Class guess = (Class) classCache.get( className );      if (guess != null) {	VM_Callbacks.notifyForName( java.lang.JikesRVMSupport.getTypeForClass(guess) );	return guess;      }	        try {	if (className.startsWith("[")) {	  if (!validArrayDescriptor(className)) throw new IllegalArgumentException();	  classCache.put(className, VM_Array.forName(className).getClassForType());	  VM_Callbacks.notifyForName( java.lang.JikesRVMSupport.getTypeForClass( ((Class)classCache.get(className)) ) );	  return (Class) classCache.get( className );	} else {	  classCache.put(className, VM_Class.forName(className).getClassForType());	  VM_Callbacks.notifyForName( java.lang.JikesRVMSupport.getTypeForClass( ((Class)classCache.get(className)) ) );	  return (Class) classCache.get( className );	}      }      catch (VM_ResolutionException e) {	throw new ClassNotFoundException(className);      }    } else {      if (DEBUG) VM_Scheduler.trace("Class.forName 3 args, loading", className);      Class klass = classLoader.loadClass(className);      if (initialize) {	  VM_Type kls = java.lang.JikesRVMSupport.getTypeForClass(klass);	  try {	      kls.resolve();	      kls.instantiate();	      kls.initialize();	  } catch (VM_ResolutionException e) {	      throw new ClassNotFoundException(className);	  }      }      VM_Callbacks.notifyForName( java.lang.JikesRVMSupport.getTypeForClass(klass) );      return klass;    }  }