HashMap Java 8 mise en œuvre

Que par le lien suivant document: Java HashMap Mise En Œuvre

Je suis confus avec la mise en œuvre de HashMap (ou plutôt, une amélioration dans HashMap). Mes questions sont:

Tout d'abord

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

Pourquoi et comment sont ces constantes utilisées? Je veux des exemples de cette.
La manière dont ils sont la réalisation d'un gain de performance avec cette?

Deuxièmement

Si vous consultez le code source de HashMap dans le JDK, vous trouverez ci-après statique intérieur de la classe:

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;
        }
    }
    //...
}

Comment est-il utilisé? Je veux juste une explication de l'algorithme.