string pool trong java

String Pool là gì?

String Pool trong Java là một vùng nhớ đặc biệt được Quản lý bởi JVM (Java Virtual Machine), dùng để lưu trữ các đối tượng String.

Mục đích của String Pool là giúp tiết kiệm bộ nhớ và tăng hiệu suất bằng cách tái sử dụng các chuỗi bằng nhau thay vì tạo mới.

Cách hoạt động của String Pool

Khi một chuỗi được tạo bằng cách sử dụng literal (chuỗi trực tiếp trong dấu ngoặc kép), JVM sẽ kiểm tra xem chuỗi đó đã tồn tại trong String Pool chưa:

  • Nếu đã tồn tại, JVM trả về tham chiếu đến chuỗi đó.
  • Nếu chưa, JVM tạo một đối tượng String mới và lưu vào String Pool.

Ví dụ:

public class StringPoolExample {
    public static void main(String[] args) {
        String s1 = "Hello";
        String s2 = "Hello";

        System.out.println(s1 == s2); // true - cùng tham chiếu trong String Pool
    }
}

Kết quả trên là true do s1s2 cùng tham chiếu đến một đối tượng trong String Pool.

String tạo bằng new

Khi tạo chuỗi bằng từ khóa new, JVM luôn tạo một đối tượng String mới trong heap memory, không sử dụng String Pool.

Ví dụ:

public class StringNewExample {
    public static void main(String[] args) {
        String s1 = new String("Hello");
        String s2 = new String("Hello");

        System.out.println(s1 == s2); // false - khác tham chiếu trong heap
        System.out.println(s1.equals(s2)); // true - nội dung giống nhau
    }
}

intern() method

Phương thức intern() dùng để đưa chuỗi về String Pool (nếu chưa có) hoặc trả về tham chiếu tối chuỗi trong Pool (nếu đã có).

Ví dụ:

public class StringInternExample {
    public static void main(String[] args) {
        String s1 = new String("Hello");
        String s2 = s1.intern();
        String s3 = "Hello";

        System.out.println(s2 == s3); // true - cùng tham chiếu trong String Pool
    }
}

Tại sao String Pool quan trọng?

  • Tăng hiệu suất: Việc tái sử dụng chuỗi đã tồn tại giúp giảm thiểu việc cấp phát và thu hồi bộ nhớ.
  • Tiết kiệm bộ nhớ: Không cần tạo nhiều đối tượng String giống nhau.
  • Tối ưu hoá GC (Garbage Collection): Giảm bố gánh lên GC do ít đối tượng hơn.

Kết luận

String Pool là một đặc điểm quan trọng trong Java, giúp quản lý bộ nhớ hiệu quả. Hiểu cách hoạt động của String Pool sẽ giúp các nhà phát triển Java viết code tối ưu hơn.

Hy vọng bài viết này giúp bạn nắm vững String Pool và áp dụng vào các dự án Java của mình!

Leave a Reply

Your email address will not be published. Required fields are marked *

Post comment