¿Cuándo JVM usará intrínsecos?

Por qué ciertos patrones de código cuando están presentes dentro de JVM las clases internas se convierten en una función intrínseca, mientras que los mismos patrones cuando son llamados desde mi propia clase no lo son.

Ejemplo:

La función bitCount, cuando se llama desde Integer.bitCount (i) se convertirá en un intrínseco. Pero cuando se copia en mi clase y luego se llama, la ejecución demorará mucho más.

Comparar

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta