Quando a JVM usará intrínsecos

Por que certos padrões de código, quando presentes nas classes internas da JVM, são transformados em uma função intrínseca, enquanto os mesmos padrões, quando chamados pela minha própria classe, não são.

Exemplo:

A função bitCount, quando chamada de dentro de Integer.bitCount (i), será transformada em um intrínseco. Mas quando copiado para a minha turma e depois chamado, demorará muito mais tempo para ser executado.

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

questionAnswers(2)

yourAnswerToTheQuestion