public int getNumCounters() {  if (VM.VerifyAssertions) VM.assert(handle != -1); return numCounters; }   public int getHandle() { return handle; }
  public void setCounter(int counterNumber, double value)  {    // Confirm that counters have been initialized (using initializeCounters(int))    if (VM.VerifyAssertions) {      VM.assert(handle != -1);    }    if (counterNumber >= getNumCounters()) {      if (automaticallyGrowCounters) {	while (counterNumber >= getNumCounters()) 	  resizeCounters(getNumCounters()*2);      }      else {	VM.assert(false);      }    }    counterManager.setCounter(this.getHandle(), counterNumber, value);  }  /**   * Return the number of counters currently allocated for this data   *   *  @return the number of counters    */  public int getNumCounters()  {    // Confirm that counters have been initialized (using initializeCounters(int))    if (VM.VerifyAssertions)      VM.assert(handle != -1);    return numCounters;  }  /**   * Counter Managers give id's that identify the counter space they   * have given to each data. This method returns that ID.    *   * @return The handle given to this data object by the counter manager.   **/  public int getHandle()  {    return handle;  }