Tham chiếu yếu
Trong lập trình máy tính, tham chiếu yếu (tiếng Anh: weak reference) là một tham chiếu mà không bảo vệ đối tượng được tham chiếu khỏi sự thu gom bởi một bộ gom rác, không giống như tham chiếu mạnh (strong reference). Một đối tượng chỉ được tham chiếu bởi tham chiếu yếu – có nghĩa là "mọi chuỗi các tham chiếu đến đối tượng đó bao gồm ít nhất một tham chiếu yếu như là một liên kết" – được xem là có thể tiếp cận được một cách yếu, và có thể được coi là không tiếp cận được và do vậy có thể bị thu thập bất cứ lúc nào. Một số ngôn ngữ dọn rác có tính năng hoặc hỗ trợ nhiều mức tham chiếu yếu, như C#, Java, Lisp, OCaml, Perl, và Python.[1]
Cách dùng
[sửa | sửa mã nguồn]Tham chiếu yếu có nhiều trường hợp sử dụng phổ biến.
Dọn rác
[sửa | sửa mã nguồn]Thu gom rác là cơ chế để làm sạch các đối tượng không còn được sử dụng nữa và do vậy giảm thiểu khả năng rò rỉ bộ nhớ (memory leak) và thoái hóa dữ liệu (data corruption). Có hai kiểu dọn rác chính: theo dấu (tracing) và đếm tham chiếu (reference counting). Sơ đồ đếm tham chiếu ghi lại số lượng tham chiếu đến một đối tượng nhất định và thu dọn đối tượng đó khi đếm tham chiếu trở về giá trị 0.
Các biến thể
[sửa | sửa mã nguồn]Vài ngôn ngữ có nhiều mức độ sức mạnh của tham chiếu yếu. Ví dụ, Java có, theo thứ tự giảm sức mạnh, tham chiếu mềm, yếu, và ma, được định nghĩa trong gói java.lang.ref.[2]
Xem thêm
[sửa | sửa mã nguồn]- Tham chiếu mềm (soft reference)
- Tham chiếu ma (phantom reference)
- Tham chiếu vòng (circular reference)
- Ephemeron
Tham khảo
[sửa | sửa mã nguồn]- ^ 8.8. weakref — Weak references, The Python Standard Library
- ^ Nicholas, Ethan (ngày 4 tháng 5 năm 2006). “Understanding Weak References”. java.net. Bản gốc lưu trữ ngày 19 tháng 8 năm 2010. Truy cập ngày 1 tháng 10 năm 2010.
- Goldshtein, Sasha; Zurbalev, Dima; Flatow, Ido (2012). Pro.NET Performance: Optimize Your C# Applications. Apress. ISBN 978-1-4302-4458-5.
Liên kết ngoài
[sửa | sửa mã nguồn]C++
[sửa | sửa mã nguồn]Java
[sửa | sửa mã nguồn]- Java developer article: 'Reference Objects and Garbage Collection'
- Nicholas, Ethan (ngày 4 tháng 5 năm 2006). “Understanding Weak References”. java.net. Bản gốc lưu trữ ngày 19 tháng 8 năm 2010. Truy cập ngày 1 tháng 10 năm 2010.
- RCache - Java Library for weak/soft reference based cache
- Java theory and practice: Plugging memory leaks with weak references
Python
[sửa | sửa mã nguồn]- https://docs.python.org/2/library/weakref.html
- Fred L. Drake, Jr., PEP 205: Weak References, Python Enhancement Proposal, January 2001.