summaryArray[bitPattern]++; totalRecompsAtLevel2 = totalRecompsAtLevel2 + recompsAtLevel2;
  static void printFinalMethodStats(PrintStream log) {    // We will traverse the hash table and for each method record its status as    // one of the following    //    B -> 0 -> 1 -> 2    //    B -> 0 -> 1     //    B -> 0     //    B      -> 1 -> 2    //    B -> 0      -> 2    //    B           -> 2    //    B      -> 1    //    //  We encode these possibilities by turning on 1 of three bits for 0, 1, 2    //  Also, for all methods that eventually get to level 2, they can be     //  recompiled an arbitrary amount of times.  We record this in in a counter.    final int MAX_BIT_PATTERN = 7;    int summaryArray[] = new int[MAX_BIT_PATTERN+1];    int totalRecompsAtLevel2 = 0;    // traverse table and give a summary of all actions that have occurred    if (table != null) {      for (Enumeration enum = table.keys(); enum.hasMoreElements() ;) {        Integer intObject = (Integer) enum.nextElement();	LinkedList planList = (LinkedList) table.get(intObject);	int bitPattern = 0;	int recompsAtLevel2 = 0;	VM_ControllerPlan plan = null;		ListIterator iter = planList.listIterator();	while (iter.hasNext()) {	plan = (VM_ControllerPlan) iter.next();	// only process plans that were completed or completed and outdated 	// by subsequent plans for this method	byte status = plan.getStatus();	if (status == VM_ControllerPlan.COMPLETED || 	    status == VM_ControllerPlan.OUTDATED) {	    int optLevel = plan.getCompPlan().options.getOptLevel();	    // check for recomps at level 2	    if (optLevel == 2 && bitIsSet(bitPattern, 2)) {	      recompsAtLevel2++;	    }	    bitPattern = setBitPattern(bitPattern, optLevel);	  } // if	} // while      	if (VM_Controller.options.LOGGING_LEVEL >= 2) {	    log.println("Method: "+ plan.getCompPlan().getMethod() 			+", bitPattern: "+ bitPattern			+", recompsAtLevel2: "+ recompsAtLevel2);	}	summaryArray[bitPattern]++;	totalRecompsAtLevel2 = totalRecompsAtLevel2 + recompsAtLevel2;      }    }