Implementação do HashMap Java 8

Conforme o seguinte documento de link:Implementação de Java HashMap

Estou confuso com a implementação deHashMap (ou melhor, um aprimoramento naHashMap) Minhas consultas são:

primeiramente

static final int TREEIFY_THRESHOLD = 8;
static final int UNTREEIFY_THRESHOLD = 6;
static final int MIN_TREEIFY_CAPACITY = 64;

Por que e como essas constantes são usadas?Eu quero alguns exemplos claros para isso. Como eles estão alcançando um ganho de desempenho com isso?

Em segundo lugar

Se você vir o código fonte deHashMap no JDK, você encontrará a seguinte classe interna estática:

static final class TreeNode<K, V> extends java.util.LinkedHashMap.Entry<K, V> {
    HashMap.TreeNode<K, V> parent;
    HashMap.TreeNode<K, V> left;
    HashMap.TreeNode<K, V> right;
    HashMap.TreeNode<K, V> prev;
    boolean red;

    TreeNode(int arg0, K arg1, V arg2, HashMap.Node<K, V> arg3) {
        super(arg0, arg1, arg2, arg3);
    }

    final HashMap.TreeNode<K, V> root() {
        HashMap.TreeNode arg0 = this;

        while (true) {
            HashMap.TreeNode arg1 = arg0.parent;
            if (arg0.parent == null) {
                return arg0;
            }

            arg0 = arg1;
        }
    }
    //...
}

Como isso é usado?Eu só quero uma explicação do algoritmo.

questionAnswers(5)

yourAnswerToTheQuestion