public void reserve() {
        if (this.capacity - this.length < JSONzip.substringLimit) {
            int from = 0;
            int to = 0;
            this.root = new Node();
            while (from < this.capacity) {
                if (this.uses[from] > 1) {
                    Kim kim = this.kims[from];
                    int thru = this.thrus[from];
                    Node node = this.root;
                    for (int at = this.froms[from]; at < thru; at += 1) {
                        Node next = node.vet(kim.get(at));
                        node = next;
                    }
                    node.integer = to;
                    this.uses[to] = age(this.uses[from]);
                    this.froms[to] = this.froms[from];
                    this.thrus[to] = thru;
                    this.kims[to] = kim;
                    to += 1;
                }
                from += 1;
            }

// It is possible, but highly unlikely, that too many items survive.
// If that happens, clear the keep.

            if (this.capacity - to < JSONzip.substringLimit) {
                this.power = 0;
                this.root = new Node();
                to = 0;
            }
            this.length = to;
            while (to < this.capacity) {
                this.uses[to] = 0;
                this.kims[to] = null;
                this.froms[to] = 0;
                this.thrus[to] = 0;
                to += 1;

            }
        }
    }