code: @GuardedBy("evictionLock")
    void increaseWindow() {
      if (mainProtectedMaximum() == 0) {
        return;
      }
  
      long quota = Math.min(adjustment(), mainProtectedMaximum());
      setMainProtectedMaximum(mainProtectedMaximum() - quota);
      setWindowMaximum(windowMaximum() + quota);
      demoteFromMainProtected();
  
      for (int i = 0; i < QUEUE_TRANSFER_THRESHOLD; i++) {
        Node<K, V> candidate = accessOrderProbationDeque().peek();
        boolean probation = true;
        if ((candidate == null) || (quota < candidate.getPolicyWeight())) {
          candidate = accessOrderProtectedDeque().peek();
          probation = false;
        }
        if (candidate == null) {
          break;
        }
  
        int weight = candidate.getPolicyWeight();
        if (quota < weight) {
          break;
        }
  
        quota -= weight;
        if (probation) {
          accessOrderProbationDeque().remove(candidate);
        } else {
          setMainProtectedWeightedSize(mainProtectedWeightedSize() - weight);
          accessOrderProtectedDeque().remove(candidate);
        }
        setWindowWeightedSize(windowWeightedSize() + weight);
        accessOrderWindowDeque().add(candidate);
        candidate.makeWindow();
      }
  
      setMainProtectedMaximum(mainProtectedMaximum() + quota);
      setWindowMaximum(windowMaximum() - quota);
      setAdjustment(quota);
    }
docs: Increases the size of the admission window by shrinking the portion allocated to the main
  space. As the main space is partitioned into probation and protected regions (80% / 20%), for
  simplicity only the protected is reduced. If the regions exceed their maximums, this may cause
  protected items to be demoted to the probation region and probation items to be demoted to the
  admission window.