if (VM.VerifyAssertions && !VM.BuildForConcurrentGC) VM.assert(VM.NOT_REACHED);
if (VM.VerifyAssertions && !VM.BuildForConcurrentGC) VM._assert(VM.NOT_REACHED);
    initiateCollection()    {	if (VM.VerifyAssertions && !VM.BuildForConcurrentGC) VM.assert(VM.NOT_REACHED);	VM_Scheduler.collectorMutex.lock();	// no need for atomic update since this thread is the only one that can reach here	VM_Scheduler.globalEpoch++;	if (VM_Scheduler.globalEpoch > VM_Scheduler.EPOCH_MAX) {	    VM_Scheduler.globalEpoch = VM_Scheduler.globalEpoch % VM_RCBuffers.MAX_INCDECBUFFER_COUNT;	}		// collector threads in the collector queue should always be ordered by processor id	while (VM_Scheduler.collectorQueue.isEmpty()) {	    VM_Scheduler.collectorMutex.unlock();	    if (trace) VM_Scheduler.trace("VM_RCHandshake", "mutator: waiting for previous collection to finish");	    VM.sysWrite("\n\n*|*|*|* COLLECTOR QUEUE EMPTY *********\n\n");	    VM_Thread.getCurrentThread().yield();	    VM_Scheduler.collectorMutex.lock();	}	// start a new collection cycle: wake up the collector thread on the first processor	VM_Scheduler.collectorQueue.dequeue(VM_Scheduler.PRIMORDIAL_PROCESSOR_ID).scheduleHighPriority();	VM_Scheduler.collectorMutex.unlock();    }