Pourquoi la classe Integer mise en cache des valeurs dans la plage de -128 à 127?

Au sujet de ma Question précédente, Pourquoi n' == comparaisons avec Entier.valueOf(String) donner des résultats différents pour 127 et 128? , nous savons que Integer class a un cache qui stocke les valeurs entre -128 et 127.

Me demandais, pourquoi entre -128 et 127?

Entier.valueOf() documentation a déclaré qu'il "cache fréquemment demandé des valeurs" . Mais n'valeurs entre -128 et 127 sont souvent demandés pour de vrai? J'ai pensé fréquemment demandés valeurs sont très subjectives.

Est-il possible que la raison derrière tout cela?

À partir de la documentation a également déclaré: "..et peut mettre en cache d'autres valeurs en dehors de cette plage."

Comment cela peut être réalisé?

Re de la documentation: Oracle sont juste couvrir leurs mégots dans le cas où ils décident de changer le comportement plus tard. Par exemple, ils peuvent décider que Java 9 cache de -1024 à 1023. Le message est, ne comptez pas sur le cache contenant ou ne contenant pas, tout entière spécifique.
Je suppose que vous boucle beaucoup plus souvent de 0 à X que de 13476 Y. Ils doivent avoir décidé que les valeurs négatives doivent également être inclus et -128 -> 127 sens pour un octet signé.
N'est-ce pas en boucle presque toujours fait w/ primitive ints -- pas en boîte Entiers? La mise en cache ne s'applique pas.
Le cache est purement une performance de chose. Tant que c'est pas de la création d'un problème de performances pour vous vous ne devriez pas vous soucier de ce que la gamme est mis en cache. (Ce serait le comble de la folie de construire dans votre code une dépendance sur l'Entier de la mise en cache.)
c'est dans le Langage Java spec, voir assylias réponse ci-dessous.

OriginalL'auteur DnR | 2014-01-03