Sự thất bại trong sự trừu tượng thực ra không phải là thực tế rằng việc thu gom rác là không xác định, mà là ở ý tưởng rằng các đối tượng "quan tâm" đến những thứ mà họ giữ tài liệu tham khảo và không quan tâm đến những thứ mà họ không nắm giữ người giới thiệu. Để xem lý do tại sao, hãy xem xét kịch bản của một đối tượng duy trì bộ đếm về tần suất một điều khiển cụ thể được vẽ. Khi tạo, nó đăng ký vào sự kiện "vẽ" của điều khiển và xử lý nó hủy đăng ký. Sự kiện nhấp chỉ đơn giản là tăng một trường và một phương thức getTotalClicks()
trả về giá trị của trường đó.
Khi đối tượng truy cập được tạo, nó phải khiến một tham chiếu đến chính nó được lưu trữ trong phạm vi kiểm soát mà nó giám sát. Kiểm soát thực sự không quan tâm đến đối tượng truy cập, và sẽ rất vui nếu đối tượng truy cập và tham chiếu đến nó, không còn tồn tại, nhưng miễn là tham chiếu tồn tại, nó sẽ gọi trình xử lý sự kiện của đối tượng đó mỗi lần nó tự sơn. Hành động này hoàn toàn vô dụng đối với điều khiển, nhưng sẽ hữu ích cho bất kỳ ai từng gọi getTotalClicks()
đối tượng.
Nếu ví dụ: một phương pháp là tạo ra một đối tượng "bộ đếm sơn" mới, thực hiện một số hành động trên điều khiển, quan sát số lần điều khiển được sơn lại, và sau đó từ bỏ đối tượng bộ đếm sơn, đối tượng sẽ vẫn đăng ký vào sự kiện mặc dù không ai quan tâm nếu đối tượng và tất cả các tham chiếu đến nó chỉ đơn giản biến mất. Các đối tượng sẽ không đủ điều kiện để thu thập, tuy nhiên, cho đến khi chính điều khiển là. Nếu phương thức đó là một phương thức sẽ được gọi nhiều nghìn lần trong vòng đời của điều khiển [một kịch bản hợp lý], thì nó có thể gây ra tràn bộ nhớ nhưng thực tế là chi phí của các lệnh gọi N có thể sẽ là O (N ^ 2) hoặc O (N ^ 3) trừ khi xử lý đăng ký rất hiệu quả và hầu hết các hoạt động không thực sự liên quan đến bất kỳ bức tranh nào.
Kịch bản cụ thể này có thể được xử lý bằng cách cung cấp cho điều khiển giữ tham chiếu yếu đến đối tượng truy cập thay vì mạnh. Một mô hình đăng ký yếu là hữu ích, nhưng không hoạt động trong trường hợp chung. Giả sử thay vì muốn có một đối tượng theo dõi một loại sự kiện từ một điều khiển duy nhất, thì người ta muốn có một đối tượng ghi nhật ký sự kiện theo dõi một số điều khiển và cơ chế xử lý sự kiện của hệ thống là mỗi điều khiển cần một tham chiếu đến một đối tượng logger sự kiện khác nhau. Trong trường hợp đó, đối tượng liên kết điều khiển với bộ ghi sự kiện sẽ chỉ tồn tại miễn là cả haikiểm soát được theo dõi và bộ ghi sự kiện vẫn hữu ích. Nếu cả trình điều khiển và trình ghi sự kiện không tham chiếu mạnh đến sự kiện liên kết, nó sẽ không còn tồn tại mặc dù nó vẫn "hữu ích". Nếu một trong hai sự kiện mạnh, thời gian tồn tại của đối tượng liên kết có thể được kéo dài vô ích ngay cả khi đối tượng kia chết.
Nếu không có tham chiếu đến một vật thể tồn tại ở bất cứ đâu trong vũ trụ, vật thể đó có thể được coi là vô dụng và bị loại khỏi sự tồn tại một cách an toàn. Tuy nhiên, thực tế là một tham chiếu tồn tại cho một đối tượng, tuy nhiên, không ngụ ý rằng đối tượng đó là "hữu ích". Trong nhiều trường hợp, tính hữu dụng thực tế của các đối tượng sẽ phụ thuộc vào sự tồn tại của các tham chiếu đến các đối tượng khác - từ quan điểm của GC - hoàn toàn không liên quan đến chúng.
Nếu các đối tượng được thông báo một cách xác định khi không ai quan tâm đến chúng, họ sẽ có thể sử dụng thông tin đó để đảm bảo rằng bất kỳ ai sẽ được hưởng lợi từ kiến thức đó đều được thông báo. Tuy nhiên, trong trường hợp không có thông báo như vậy, không có cách chung nào để xác định đối tượng nào được coi là "hữu ích" nếu người ta chỉ biết tập hợp các tham chiếu tồn tại và không có ý nghĩa ngữ nghĩa được đính kèm với các tham chiếu đó. Do đó, bất kỳ mô hình nào giả định rằng sự tồn tại hoặc không tồn tại của các tham chiếu là đủ để quản lý tài nguyên tự động sẽ bị tiêu diệt ngay cả khi GC có thể phát hiện ngay việc từ bỏ đối tượng.