Compact Strings được giới thiệu trong Java 9 để thay thế Compressed Strings của Java 6. Cách triển khai sử dụng mảng byte[] thay vì char[] và thêm trường coder để xác định định dạng LATIN1 (1 byte/ký tự) hay UTF-16 (2 byte/ký tự).
Trong khi đó, Compressed Strings (Java 6) dùng byte[] cho 1 byte/ký tự nhưng vẫn dùng char[] cho 2 byte/ký tự, bật bằng cờ -XX:+UseCompressedStrings.
So sánh chính
| Đặc điểm | Compressed Strings (Java 6) | Compact Strings (Java 9+) |
|---|---|---|
| Kiểu lưu trữ | byte[] hoặc char[] (song song) | byte[] duy nhất + coder |
| Unpacking/Repacking | Cần thiết | Không cần |
| Hiệu năng runtime | Thấp hơn do chuyển đổi | Tốt hơn đáng kể |
| Mặc định | Tắt (cần bật thủ công) | Bật mặc định |
| Cờ JVM | -XX:+UseCompressedStrings | -XX:-CompactStrings (để tắt) |
Lợi ích của Compact Strings
- Giảm bộ nhớ: Chuỗi chỉ chứa Latin-1 dùng 1 byte/ký tự thay vì 2 byte.
- Không cần unpack/repack khi thao tác chuỗi.
- Tăng hiệu năng GC và cache do giảm footprint bộ nhớ.
- Mặc định bật, không cần cấu hình thêm.
Ví dụ cấu trúc nội bộ
// Java 8
public class String {
private final char[] value;
}
// Java 9+
public class String {
private final byte[] value;
private final byte coder; // 0 = LATIN1, 1 = UTF16
}
Compact Strings là cải tiến quan trọng giúp Java 9+ tiết kiệm bộ nhớ đáng kể cho ứng dụng xử lý nhiều chuỗi văn bản.