Trong lý thuyết bạn có thể về các ký tự Integer.MAX_VALUE, JVM bị giới hạn về kích thước của mảng mà nó có thể sử dụng.
public static void main(String... args) {
for (int i = 0; i < 4; i++) {
int len = Integer.MAX_VALUE - i;
try {
char[] ch = new char[len];
System.out.println("len: " + len + " OK");
} catch (Error e) {
System.out.println("len: " + len + " " + e);
}
}
}
trên Oracle Java 8 cập nhật 92 bản in
len: 2147483647 java.lang.OutOfMemoryError: Requested array size exceeds VM limit
len: 2147483646 java.lang.OutOfMemoryError: Requested array size exceeds VM limit
len: 2147483645 OK
len: 2147483644 OK
Lưu ý: trong Java 9, Chuỗi sẽ sử dụng byte [], điều đó có nghĩa là các ký tự nhiều byte sẽ sử dụng nhiều hơn một byte và giảm tối đa hơn nữa. Nếu bạn có tất cả bốn điểm mã byte, ví dụ như biểu tượng cảm xúc, bạn sẽ chỉ nhận được khoảng 500 triệu ký tự