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

Tham chiếu yếu có nhiều trường hợp sử dụng phổ biến.

Dọn rác

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ể

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

  • Tham chiếu mềm (soft reference)
  • Tham chiếu ma (phantom reference)
  • Tham chiếu vòng (circular reference)
  • Ephemeron

Tham khảo

  1. ^ 8.8. weakref — Weak references, The Python Standard Library
  2. ^ 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

C++

  • C++11 Standard Library: std::weak_ptr reference
  • Boost 1.59 (C++ library): boost::weak_ptr reference

Java

  • 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

  • https://docs.python.org/2/library/weakref.html
  • Fred L. Drake, Jr., PEP 205: Weak References, Python Enhancement Proposal, January 2001.

Bản mẫu:Quản lý bộ nhớ