Heavily Ref là gì

X

Privacy & Cookies

This site uses cookies. By continuing, you agree to their use. Learn more, including how to control cookies.

Got It!

Advertisements

Java có một hệ thống kiểu Reference gồm nhiều loại, mỗi loạicó một tính chất riêng biệt để ta có thể lựa chọn cho phù hợp với quá trình Grabage Collector.

Java có 4 loại là:

  • Strong Reference [Tham chiếu mạnh]
  • Soft Reference [Tham chiếu mềm]
  • Weak Reference [Tham chiếu yếu]
  • Phantom Reference [Tham chiếu ma]

Reference càng mạng thì Garbage Collector càng khó đủ điều kiện dọn dẹp đối tượng.

Strong Reference là loại reference mạnh nhất và thông dụng nhất, chúng là loại reference thông thường của Java.

Ba loại reference còn lại được cung cấp trong package java.lang.ref và được gọi chung là non-strong reference [Tham chiếu không mạnh]. Các đối tượng của các class trong package java.lang.ref được gọi là reference object [Đối tượng tham chiếu].

Bài này mình sẽ viết về loại reference đầu tiên đó là Strong Reference.

1/ Khái niệm

Trong khoa học máy tính, Strong Reference là một loại reference thỏa mãn tính chất:

Gargabe Collector sẽ không đủ điều kiện để dọn dẹp các đối tượng có bất kỳ một chuỗi Strong Referencenào dẫn đến đối tượng đó.

Có nghĩa là ta có thể sử dụng các đối tượng đó mà KHÔNGcần phải dùng đến các loại tham chiếu không mạnh [non-strong reference]. Những đối tượng này đươc gọi là strongly reachable object.

Nói cách đơn giản hơn là:

Strong Reference giữ cho đối tượng mà nó tham chiếu đến không bị Gargabe Collector dọn dẹp.

Trong Java các tham chiếu đối tượng thông thường đều là Strong Reference.

Ví dụ:

List names = new ArrayList[];

2/ Ví dụ:

Ví dụ 1:

Giải thích:

Trong ví dụ trên, nếu có dòng strong = null thì đối tượng Something được tạo ra sẽ không có Strong Reference dẫn đến khi gọi System.gc[] thì Gargabe Collector sẽ dọn dẹp đối tượng Something và trước khi bị dọn dẹp thì method finalize[] của nó được gọi, kết quả xuất ra là Đây là lời của tôi trước khi vĩnh biệt..

Còn nếu không có dòng strong = null thì đối tượng Something được tạo ra sẽ có Strong Reference dẫn đến khi gọi System.gc[] thì Gargabe Collector sẽ không dọn dẹp được đối tượng Something. Do đó sẽ không xuất ra ra câu Đây là lời của tôi trước khi vĩnh biệt..

Ví dụ 2:

Giải thích:

Sau khi method test[] kết thúc, đối tượng Something được tạo ra sẽ không có Strong Reference là bởi vì nó là biến cục bộ, cho nên Gargabe Collecter đủ điều kiện để dọn dẹp. Kết quả là dòng chữ Đây là lời của tôi trước khi vĩnh biệt. được xuất ra.

Nhưng nếu ta sửa code đổi biến strong thành biến toàn cục thì sau khi method test[] kết thúc, đối tượng Something được tạo ra sẽ có Strong Reference, do đó Gargabe Collector sẽ không thể dọn dẹp và kết quả là dòng chữ Đây là lời của tôi trước khi vĩnh biệt. sẽ không được in ra.

Cũng như ví dụ 1, nếu ta thêm strong = null, thì câu Đây là lời của tôi trước khi vĩnh biệt. sẽ được in ra.

Hoặc ta không dùng strong = null, mà tạo 1 đối tượng Something khác và tham chiếu như dưới đây thì dòng chữ Đây là lời của tôi trước khi vĩnh biệt. cũng được in ra.

Ví dụ 3:

Giải thích:

Như bạn đã thấy, ta cho đối tượng Something vào List nên dù sau đó ta dùng strong = null thì nó vẫn là Strong Reference nên không bị Gargabe Collector dọn dẹp. Kết quả sẽ là:

Còn nếu ta thêm dòng list = null thì đối tượng Something sẽ bị cô lập và do đó kết quả sẽ là:

Ta cũng có thể không dùng list = null mà thay vào đó là list.clear[] thì kết quả cũng như trên.

Ví dụ 4:

Tương tụ như ví dụ 1, nhưng ta thay bằng một đối tượng Something khác. Và kết quả là:

Bài viết đến đây là kết thúc. Chúc các bạn nằm vững kiến thức nhé.

Nguồn://diendan.congdongcviet.com/threads/t193813::cac-loai-reference-trong-java-strong-reference-soft-reference-weak-reference-phantom-reference-ung-dung.cpp

Advertisements

Share this:

Video liên quan

Chủ Đề