CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Mục lục

Trang chủBlogString Pool trong Java là...
Java

String Pool trong Java là gì? Hiểu rõ cách hoạt động và tối ưu bộ nhớ

3 phút đọc30/07/2025
CyStack Author
Bao Tran

Web Developer

0 lượt xem
Reading Time: 3 minutes

Đúng như tên gọi của nó, String pool trong Java là một vùng chứa các đối tượng String được lưu trữ trong bộ nhớ heap. Như ta đã biết, String là một class đặc biệt và chúng ta có thể tạo đối tượng String bằng toán tử new hoặc bằng cách gán giá trị trực tiếp trong dấu ngoặc kép.

String Pool trong Java

String pool trong Java

Sơ đồ dưới đây minh họa rõ ràng cách String pool được duy trì trong vùng nhớ heap của Java, cũng như những gì xảy ra khi chúng ta tạo String với các cách khác nhau.

Sơ đồ String pool trong Java

String pool có thể tồn tại là nhờ vào tính bất biến (immutable) của String trong Java và việc triển khai khái niệm String interning (phương pháp tối ưng lưu trữ String giống nhau chung một chỗ, không trùng lặp). Đây cũng là một ví dụ của mẫu thiết kế Flyweight. String pool giúp ta tiết kiệm rất nhiều dung lượng bộ nhớ cho Java Runtime mặc dù việc tạo String có thể tốn nhiều thời gian hơn.

Khi ta dùng dấu ngoặc kép để tạo một String, Java trước tiên sẽ tìm kiếm trong String pool một String có cùng giá trị. Nếu tìm thấy, nó chỉ trả về tham chiếu đến đối tượng đã có. Ngược lại, nó sẽ tạo một String mới trong pool rồi trả về tham chiếu của đối tượng mới đó.

Tuy nhiên, khi sử dụng toán tử new, chúng ta buộc class String phải tạo một đối tượng String mới trong vùng nhớ heap. Chúng ta có thể dùng phương thức intern() để đưa một String được tạo bằng new vào trong pool, hoặc để lấy tham chiếu đến một đối tượng String có cùng giá trị từ pool.

Dưới đây là chương trình Java minh họa cho sơ đồ về String pool ở trên:

package com.journaldev.util;

public class StringPool {

    /**
     * Java String Pool example
     * @param args
     */
    public static void main(String[] args) {
        String s1 = "Cat";
        String s2 = "Cat";
        String s3 = new String("Cat");
        
        System.out.println("s1 == s2 :"+(s1==s2));
        System.out.println("s1 == s3 :"+(s1==s3));
    }

}

Output của chương trình:

s1 == s2 :true
s1 == s3 :false

Có bao nhiêu String được tạo ra trong String pool?

Trong các buổi phỏng vấn về Java, đôi khi bạn sẽ gặp câu hỏi liên quan đến String pool. Ví dụ, có bao nhiêu chuỗi string được tạo ra trong câu lệnh dưới đây?

String str = new String("Cat");

Với câu lệnh trên, sẽ có 1 hoặc 2 đối tượng string được tạo ra. Nếu string literal (chuỗi nguyên bản) “Cat” đã tồn tại trong pool, thì chỉ có một đối tượng String mới được tạo ra trên heap (và được gán cho biến str).

Nếu string literal “Cat” chưa có trong pool, thì đầu tiên nó sẽ được tạo trong pool, sau đó một đối tượng String khác sẽ được tạo trên vùng nhớ heap. Như vậy, tổng cộng sẽ có 2 đối tượng String được tạo ra.

Tổng kết

String pool là một phần không thể thiếu trong cơ chế quản lý chuỗi của Java, giúp tái sử dụng các đối tượng String nhằm nâng cao hiệu quả sử dụng bộ nhớ. Bạn nên chủ động áp dụng kiến thức này trong code để tránh tạo thừa nhiều đối tượng String. Nếu gặp khó khăn hoặc muốn tìm hiểu sâu hơn về String pool, đừng ngần ngại để lại câu hỏi của bạn bên dưới.

Về tác giả

Bao Tran
Bao TranWeb Developer

I’m passionate about web development and sharing my insights through articles, with over 8 years of experience. I hope these sharings inspire you and help build a strong web development community. @#@ Tôi đam mê phát triển web và chia sẻ những hiểu biết của mình thông qua các bài viết, với hơn 8 năm kinh nghiệm. Tôi hy vọng những chia sẻ này sẽ truyền cảm hứng cho các bạn và giúp xây dựng một cộng đồng phát triển web mạnh mẽ.

Cập nhật thông tin mới nhấtNhận các thông tin mới nhất về mối đe dọa, báo cáo an ninh mạng từ CyStack về hòm thư điện tử của bạn

Thảo luận (0)

Đăng nhập để thảo luận

Bài viết liên quan