if (VM.VerifyAssertions) VM.assert(method != null);
if (VM.VerifyAssertions) VM._assert(method != null);
   run() //- overrides Thread      {      if (TRACE) {	VM_Scheduler.trace("FinalizerThread ", "run routine entered");      }      while (true)         {         // suspend this thread: it will resume when the garbage collector	 // places objects on the finalizer queue and notifies.         //	 VM_Scheduler.finalizerMutex.lock();	 VM_Thread.getCurrentThread().yield(VM_Scheduler.finalizerQueue, 	   VM_Scheduler.finalizerMutex);          if (TRACE) 	   {	    VM_Scheduler.trace("FinalizerThread", "starting finalization");	    if (TRACE_DETAIL) {	      VM_Finalizer.dump_live();	      VM_Finalizer.dump_finalize();	    }	   }  	 synchronized (marker) {	 Object o = VM_Finalizer.get();	 if (TRACE_DETAIL) VM_Scheduler.trace("FinalizerThread: ", "object at ",	   VM_Magic.objectAsAddress(o));	 while (o != null) {	   try {	     VM_Method method = VM_Magic.getObjectType(o).asClass().getFinalizer();	     if (VM.VerifyAssertions) VM.assert(method != null);	     Object[]  none = new Object[0];	     Object    ret = VM_Reflection.invoke(method, o, none);	   }	   catch (Exception e) {	     if (TRACE) VM.sysWrite("Throwable exception caught for finalize call\n");	   }	   o = VM_Finalizer.get();	   if (TRACE_DETAIL) VM_Scheduler.trace("FinalizerThread", "object at ",	      VM_Magic.objectAsAddress(o));	 }         if (TRACE) VM_Scheduler.trace("FinalizerThread", "finished finalization");	     	 }	 	// synchronized (marker)	 }		// while (true)      }  // run