Wann wird JVM Intrinsics verwenden?

Warum bestimmte Codemuster, wenn sie in internen JVM-Klassen vorhanden sind, in eine intrinsische Funktion umgewandelt werden, wohingegen dieselben Muster, wenn sie von meiner eigenen Klasse aufgerufen werden, dies nicht sind.

Beispiel:

Die Funktion bitCount wird beim Aufruf aus Integer.bitCount (i) in eine intrinsische umgewandelt. Aber wenn es in meine Klasse kopiert und dann aufgerufen wird, dauert die Ausführung viel länger.

Vergleichen Sie

Integer.bitCount(i) 
MyClass.bitCount(i) 


public static int bitCount(int i) {
    // HD, Figure 5-2
    i = i - ((i >>> 1) & 0x55555555);
    i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
    i = (i + (i >>> 4)) & 0x0f0f0f0f;
    i = i + (i >>> 8);
    i = i + (i >>> 16);
    return i & 0x3f;
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage