Garbage Collection

Threading

Trong java, rác (garbage) có nghĩa là các đối tượng không còn được hiệu dụng nữa, chẳng hạn như không còn tham chiếu nào chỉ tới nó nữa.

Java sử dụng Bộ thu gom rác (Garbage Collection – GC) để thực hiện quá trình giải phóng phần bộ nhớ vô dụng một cách tự động. Nói cách khác, đó là một cách để phá hủy các đối tượng vô dụng. GC hoạt động hoàn toàn tự động giúp nhà phát triển quản lý bộ nhớ tốt hơn. 

Ưu điểm của Garbage Collection 

  • Nó làm cho việc sử dụng bộ nhớ java hiệu quảbởi vì bộ thu gom rác (Garbage Collection) loại bỏ các đối tượng không được tham chiếu ra khỏi bộ nhớ heap.
  • GC là một phần của JVM và nó được được thực thi tự động, vì vậy chúng ta không cần phải nỗ lực nhiều để giải phóng bộ nhớ.

Làm thế nào mà một đối tượng trở nên vô hiệu? 

Khi chương trình không còn có cách nào để truy cập tới một đối tượng nữa, thì đối tượng đó trở nên vô hiệu. Ví dụ, một đối tượng đang được tham chiếu tới từ một biến, nhưng sau khi biến (tham chiếu) đó được gán giá trị null, thực tế đối tượng cũ vẫn tồn tại trên heap, nhưng nếu không còn biến nào khác tham chiếu đến, thì đối tượng sẽ trở nên không thể truy cập lại được nữa, và vô hiệu.

Có một số hành động có thể tạo nên đối tượng vô hiệu:

  • Gán giá trị null cho một tham chiếu
  • Gán đối tượng khác cho một tham chiếu
  • Tạo ra các đối tượng không tên (không có tham chiếu).

1) Gán giá trị null

Employee e=new Employee();
e=null;

2) Gán đối tượng đến một tham chiếu khác

Employee e1=new Employee();
Employee e2=new Employee();
e1=e2;

3) Đối tượng annonymous

new Employee();

Phương thức finalize() 

Phương thức finalize() được gọi mỗi lần trước khi đối tượng được thu gom rác (không đồng nghĩa với việc cần phải gọi phương thức nào thì đối tượng mới được dọn dẹp).

protected void finalize(){}

Nhà phát triển có thể override phương thức này để tùy biến việc dọn dẹp, chẳng hạn khi JVM giải phóng đối tượng a thì đồng thời vô hiệu một đối tượng b khác.

Phương thức gc() 

Phương thức gc () được sử dụng để gọi bộ thu gom rác để thực hiện quá trình dọn dẹp. Tuy vậy, cần nhớ là không có gì đảm bảo là JVM sẽ thực hiện dọn dẹp ngay lập tức.

Ví dụ về garbage collection trong java 


public class TestGarbage1 {
    public void finalize() {
        System.out.println("object is garbage collected");
    }
 
    public static void main(String args[]) {
        TestGarbage1 s1 = new TestGarbage1();
        TestGarbage1 s2 = new TestGarbage1();

        s1 = null;
        s2 = null;

        System.gc();
    }
}


Output: 
object is garbage collected
object is garbage collected

Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Leave a Reply

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