Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Khác biệt giữa Compact Strings và Compressed Strings trong Java 9

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ểmCompressed Strings (Java 6)Compact Strings (Java 9+)
Kiểu lưu trữbyte[] hoặc char[] (song song)byte[] duy nhất + coder
Unpacking/RepackingCần thiếtKhông cần
Hiệu năng runtimeThấp hơn do chuyển đổiTốt hơn đáng kể
Mặc địnhTắ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.