public void put(Object new_o, InstanceStats new_is) {
public final void put(Object new_o, InstanceStats new_is) {
  public void put(Object new_o, InstanceStats new_is) {    if (objs == null) {      resize();    }    int h = hash(new_o, objs.length);    // assume this is new and insert at the head    InstanceStats old_is = objs[h];    new_is.next = old_is;    objs[h] = new_is;    allocate(new_is);    objs_size++;    if (objs_size >= objs_threshold) {      // resize, scan for gc'ed entries      resize();    } else {      // while we're here, let's scan for gc'ed entries      InstanceStats prev = new_is;       InstanceStats is = old_is;       while (is != null) {        Object o = is.get();        if (o == null) {          gc(is);          objs_size--;          InstanceStats dead = is;          is = dead.next;          dead.next = null;          prev.next = is;        } else {          // check for (o == new_o)?          if (o == new_o) {            System.err.println("put: already have object");            (new Throwable()).printStackTrace();            System.exit(1);          }           prev = is;          is = is.next;        }      }    }  }