Пример #1
0
 /**
  * Uses random numbers to sample the entire map.
  *
  * @return an array of sampled elements
  */
 private LfuPolicy.Metadata[] sampleElements(Map map) {
   int[] offsets = LfuPolicy.generateRandomSample(map.size());
   DiskElement[] elements = new DiskElement[offsets.length];
   Iterator iterator = map.values().iterator();
   for (int i = 0; i < offsets.length; i++) {
     for (int j = 0; j < offsets[i]; j++) {
       iterator.next();
     }
     elements[i] = (DiskElement) iterator.next();
   }
   return elements;
 }
Пример #2
0
 /**
  * Uses random numbers to sample the entire map.
  *
  * <p>This implemenation uses a key array.
  *
  * @return a random sample of elements
  */
 protected Element[] sampleElementsViaKeyArray() {
   int[] indices = LfuPolicy.generateRandomSampleIndices(maximumSize);
   Element[] elements = new Element[indices.length];
   for (int i = 0; i < indices.length; i++) {
     Object key = keyArray.get(indices[i]);
     if (key == null) {
       continue;
     }
     elements[i] = (Element) map.get(key);
   }
   return elements;
 }
Пример #3
0
  /**
   * Uses random numbers to sample the entire map.
   *
   * <p>This implemenation uses the {@link ConcurrentHashMap} iterator.
   *
   * @return a random sample of elements
   */
  protected Element[] sampleElements(int size) {
    int[] offsets = LfuPolicy.generateRandomSample(size);
    Element[] elements = new Element[offsets.length];
    Iterator iterator = map.values().iterator();
    for (int i = 0; i < offsets.length; i++) {
      for (int j = 0; j < offsets[i]; j++) {
        // fast forward
        try {
          iterator.next();
        } catch (NoSuchElementException e) {
          // e.printStackTrace();
        }
      }

      try {
        elements[i] = ((Element) iterator.next());
      } catch (NoSuchElementException e) {
        // e.printStackTrace();
      }
    }
    return elements;
  }
Пример #4
0
 /** Find a "relatively" unused disk element, but not the element just added. */
 private DiskElement findRelativelyUnused() {
   LfuPolicy.Metadata[] elements = sampleElements(diskElements);
   LfuPolicy.Metadata metadata = LfuPolicy.leastHit(elements, null);
   return (DiskElement) metadata;
 }