private long testLong(int size, int iterations, boolean firstMethod) {

    Map<ReusableString, LongImpl> map = new HashMap<ReusableString, LongImpl>(size);

    for (int i = 0; i < size; ++i) {
      ReusableString key = new ReusableString("SOMEKEY" + (10000000 + i));
      map.put(key, new LongImpl(key));
    }

    ReusableString[] keys = map.keySet().toArray(new ReusableString[size]);

    Utils.invokeGC();

    int cnt = _dontOpt;

    long startTime = System.currentTimeMillis();

    if (firstMethod) {
      for (int i = 0; i < iterations; ++i) {
        int max = keys.length;

        for (int j = 0; j < max; ++j) {
          LongImpl order = map.get(keys[j]);

          order.aaa11111111111111111111(j);
        }
      }

    } else {
      for (int i = 0; i < iterations; ++i) {
        int max = keys.length;

        for (int j = 0; j < max; ++j) {
          LongImpl order = map.get(keys[j]);

          order.aaa1111111111111111111S(j);
        }
      }
    }

    long endTime = System.currentTimeMillis();

    _dontOpt = cnt;

    return endTime - startTime;
  }