Chỉ cần tự hỏi, tại sao giữa -128 và 127?
Một loạt các số nguyên lớn hơn có thể được lưu vào bộ nhớ cache, nhưng ít nhất những số từ -128 đến 127 phải được lưu vào bộ nhớ cache vì nó được Đặc tả ngôn ngữ Java yêu cầu (tôi nhấn mạnh):
Nếu giá trị p đang được đóng hộp là true, false, một byte hoặc một ký tự trong phạm vi \ u0000 đến \ u007f, hoặc một số int hoặc số ngắn trong khoảng -128 đến 127 (bao gồm) , thì r1 và r2 là kết quả của bất kỳ hai chuyển đổi quyền anh của p. Nó luôn luôn là trường hợp r1 == r2.
Cơ sở lý luận cho yêu cầu này được giải thích trong cùng một đoạn:
Lý tưởng nhất, quyền anh một giá trị nguyên thủy nhất định p, sẽ luôn mang lại một tham chiếu giống hệt nhau . Trong thực tế, điều này có thể không khả thi nếu sử dụng các kỹ thuật triển khai hiện có. Các quy tắc trên là một thỏa hiệp thực dụng. Mệnh đề cuối cùng ở trên yêu cầu các giá trị chung nhất định luôn được đóng hộp thành các đối tượng không thể phân biệt được. [...]
Điều này đảm bảo rằng trong hầu hết các trường hợp phổ biến, hành vi sẽ là hành vi mong muốn, mà không áp dụng hình phạt hiệu suất quá mức, đặc biệt là trên các thiết bị nhỏ . Ví dụ: các triển khai giới hạn bộ nhớ ít hơn có thể lưu vào bộ nhớ cache tất cả các giá trị char và short, cũng như các giá trị int và long trong phạm vi -32K đến + 32K.
Làm cách nào để lưu vào bộ nhớ cache các giá trị khác ngoài phạm vi này.?
Bạn có thể sử dụng -XX:AutoBoxCacheMax
tùy chọn JVM, tùy chọn này không thực sự được ghi lại trong danh sách Tùy chọn JVM của điểm phát sóng hiện có . Tuy nhiên, nó được đề cập trong các nhận xét bên trong Integer
lớp xung quanh dòng 590 :
Kích thước của bộ nhớ cache có thể được kiểm soát bởi -XX:AutoBoxCacheMax=<size>
tùy chọn.
Lưu ý rằng đây là cách triển khai cụ thể và có thể có hoặc không có sẵn trên các JVM khác.