if ( ! (TIME_GC_PHASES || VM_CollectorThread.MEASURE_WAIT_TIMES || VM.verboseGC) ) return;
  printSummaryStatistics () {    int avgTime=0, avgStartTime=0;    int np = VM_Scheduler.numProcessors;    // produce summary system exit output if -verbose:gc was specified of if    // compiled with measurement flags turned on    //    if ( ! (TIME_GC_PHASES || VM_CollectorThread.MEASURE_WAIT_TIMES || VM.verboseGC) )      return;     // not verbose, no flags on, so don't produce output    VM.sysWrite("\nGC stats: Mark Sweep Collector (");    VM.sysWrite(np,false);    VM.sysWrite(" Collector Threads ):\n");    VM.sysWrite("          Heap Size ");    VM.sysWrite(smallHeapSize,false);    VM.sysWrite("  Large Object Heap Size ");    VM.sysWrite(largeHeapSize,false);    VM.sysWrite("\n");    if (gcCount>0) {      avgTime = (int)( ((gcTotalTime/(double)gcCount)*1000.0) );      avgStartTime = (int)( ((totalStartTime/(double)gcCount)*1000000.0) );    }    VM.sysWrite(gcCount,false);    VM.sysWrite(" Collections: avgTime ");    VM.sysWrite(avgTime,false);    VM.sysWrite(" (ms) maxTime ");    VM.sysWrite((int)(gcMaxTime*1000.0),false);    VM.sysWrite(" (ms) totalTime ");    VM.sysWrite((int)(gcTotalTime*1000.0),false);    VM.sysWrite(" (ms) avgStartTime ");    VM.sysWrite(avgStartTime,false);    VM.sysWrite(" (us)\n\n");    if (TIME_GC_PHASES) {       int avgStart=0, avgInit=0, avgScan=0, avgFinalize=0, avgFinish=0;      if (gcCount>0) {	avgStart = (int)((totalStartTime/(double)gcCount)*1000000.0);	avgInit = (int)((totalInitTime/(double)gcCount)*1000000.0);	avgScan = (int)((totalScanningTime/(double)gcCount)*1000.0);	avgFinalize = (int)((totalFinalizeTime/(double)gcCount)*1000000.0);	avgFinish = (int)((totalFinishTime/(double)gcCount)*1000000.0);      }      VM.sysWrite("Average Time in Phases of Collection:\n");      VM.sysWrite("startTime ");      VM.sysWrite( avgStart, false);      VM.sysWrite("(us) init ");      VM.sysWrite( avgInit, false);      VM.sysWrite("(us) scanning ");      VM.sysWrite( avgScan, false );      VM.sysWrite("(ms) finalize ");      VM.sysWrite( avgFinalize, false);      VM.sysWrite("(us) finish ");      VM.sysWrite( avgFinish, false);      VM.sysWrite("(us)>\n\n");    }    if (VM_CollectorThread.MEASURE_WAIT_TIMES) {      double totalBufferWait = 0.0;      double totalFinishWait = 0.0;      double totalRendezvousWait = 0.0;        int avgBufferWait=0, avgFinishWait=0, avgRendezvousWait=0;      VM_CollectorThread ct;      for (int i=1; i <= np; i++ ) {	ct = VM_CollectorThread.collectorThreads[VM_Scheduler.processors[i].id];	totalBufferWait += ct.totalBufferWait;	totalFinishWait += ct.totalFinishWait;	totalRendezvousWait += ct.totalRendezvousWait;      }      if (gcCount>0) {	avgBufferWait = ((int)((totalBufferWait/(double)gcCount)*1000000.0))/np;	avgFinishWait = ((int)((totalFinishWait/(double)gcCount)*1000000.0))/np;	avgRendezvousWait = ((int)((totalRendezvousWait/(double)gcCount)*1000000.0))/np;      }      VM.sysWrite("Average Wait Times For Each Collector Thread In A Collection:\n");      VM.sysWrite("Buffer Wait ");      VM.sysWrite( avgBufferWait, false);      VM.sysWrite(" (us) Finish Wait ");      VM.sysWrite( avgFinishWait, false);      VM.sysWrite(" (us) Rendezvous Wait ");      VM.sysWrite( avgRendezvousWait, false);      VM.sysWrite(" (us)\n\n");      VM.sysWrite("Sum of Wait Times For All Collector Threads ( ");      VM.sysWrite(np,false);      VM.sysWrite(" Collector Threads ):\n");      VM.sysWrite("Buffer Wait ");      VM.sysWrite( (int)(totalBufferWait*1000.0), false);      VM.sysWrite(" (ms) Finish Wait ");      VM.sysWrite( (int)(totalFinishWait*1000.0), false);      VM.sysWrite(" (ms) Rendezvous Wait ");      VM.sysWrite( (int)(totalRendezvousWait*1000.0), false);      VM.sysWrite(" (ms) TOTAL ");      VM.sysWrite( (int)((totalRendezvousWait+totalFinishWait+totalBufferWait)*1000.0), false);      VM.sysWrite(" (ms)\n");    }		if (COUNT_ALLOCATIONS) {			VM.sysWrite(" Total No. of Objects Allocated in this run ");			long bytes = 0, objects = 0;			VM_Processor st;			for (int i = 1; i <= VM_Scheduler.numProcessors; i++) {				st = VM_Scheduler.processors[i];				bytes += st.totalBytesAllocated;				objects += st.totalObjectsAllocated;			}			VM.sysWrite(Long.toString(objects));			VM.sysWrite("\n Total No. of bytes Allocated in this run ");			VM.sysWrite(Long.toString(bytes));			VM.sysWrite("\n");		}    VM.sysWrite(" Number of threads found stuck in native code = ");    VM.sysWrite(VM_NativeDaemonThread.switch_count);    VM.sysWrite("\n");  }