Je me demandais, pourquoi entre -128 et 127?
Une large gamme de nombres entiers peuvent être mis en cache, mais au moins, ceux compris entre -128 et 127 doit être mis en cache, car il est mandaté par le Langage Java Specification (l'emphase est mienne):
Si la valeur de p étant le coffret est vrai, de faux, d'un octet, ou un char dans la gamme \u0000 à \u007f, ou un int ou un numéro court entre -128 et 127 (inclus), puis laissez r1 et r2 les résultats de deux de boxe conversions de p. C'est toujours le cas que r1 == r2.
La justification de cette exigence est expliqué dans le même paragraphe:
Idéalement, la boxe une valeur primitive p, serait toujours un rendement identique de référence. Dans la pratique, cela peut ne pas être réalisable en utilisant les techniques de mise en œuvre. Les règles ci-dessus sont un compromis pragmatique. La finale de la clause ci-dessus exige que certaines valeurs communes, toujours encadré dans impossibles à distinguer les objets. [...]
Cela garantit que, dans la plupart des cas, le comportement sera le désirer, sans imposer indûment les performances, en particulier sur les petits appareils. Moins de mémoire limitée implémentations pourrait, par exemple, la mise en cache de tous les char et short de valeurs, ainsi que int et long valeurs dans la plage de -32K à +32K.
Comment puis-je mettre en cache d'autres valeurs en dehors de cette plage.?
Vous pouvez utiliser l' -XX:AutoBoxCacheMax
de la JVM de l'option, qui n'est pas vraiment documenté dans la liste des accès disponibles Options JVM. Toutefois, il est mentionné dans les commentaires à l'intérieur de l' Integer
classe autour de la ligne 590:
La taille du cache peut être contrôlé par l' -XX:AutoBoxCacheMax=<size>
option.
Notez que cette mise en œuvre est spécifique et peuvent ou peuvent ne pas être disponibles sur d'autres machines virtuelles.