왜 -128에서 127 사이입니까?
더 큰 범위의 정수 가 캐시 될 수 있지만 적어도 -128에서 127 사이 의 정수 는 Java 언어 사양 (강조 내)에 의해 요구되기 때문에 캐시 되어야합니다 .
boxing되는 값 p가 true, false, 바이트 또는 \ u0000에서 \ u007f 범위의 char이거나 -128에서 127 (포함) 사이의 int 또는 짧은 숫자 인 경우 r1 및 r2를 p의 두 권투 변환. 항상 r1 == r2 인 경우입니다.
이 요구 사항의 근거는 같은 단락에 설명되어 있습니다.
이상적으로, 주어진 기본 값 p를 박싱하면 항상 동일한 참조가 생성 됩니다. 실제로 이것은 기존 구현 기술을 사용하여 실현 가능하지 않을 수 있습니다. 위의 규칙은 실용적인 타협입니다. 위의 마지막 절에서는 특정 공통 값을 항상 구별 할 수없는 개체로 묶어야합니다. [...]
이렇게하면 특히 소형 장치에서 과도한 성능 저하없이 대부분의 일반적인 경우 동작이 원하는 동작이됩니다 . 예를 들어 메모리 제한이 적은 구현에서는 모든 char 및 short 값은 물론 -32K에서 + 32K 범위의 int 및 long 값을 캐시 할 수 있습니다.
이 범위를 벗어난 다른 값을 캐시하려면 어떻게해야합니까?
사용 가능한 핫스팟 JVM 옵션-XX:AutoBoxCacheMax
목록에 실제로 문서화되지 않은 JVM 옵션 을 사용할 수 있습니다 . 그러나 590 행 주위 의 Integer
클래스 내부 주석에 언급되어 있습니다 .
캐시의 크기는 -XX:AutoBoxCacheMax=<size>
옵션 으로 제어 할 수 있습니다 .
이것은 구현에 따라 다르며 다른 JVM에서 사용 가능할 수도 있고 사용 가능하지 않을 수도 있습니다.