Was ist eine schwache Referenz?
Ein schwacher Verweis ist ein Verweis auf ein Objekt im Speicher, der nicht verhindert, dass ein Objekt aufgrund seiner Zuordnung zum Objekt von Garbage Collection-Routinen bereinigt wird. Diese Art von Referenz wird häufig verwendet, um Speicherverluste zu vermeiden, wenn besondere Bedingungen vorliegen, die das Auftreten einer normalen Speicherbereinigung verhindern. Programmieralgorithmen, die eine Zirkelreferenz verwenden oder Fremdinformationen in einem Cache oder einer speziellen Struktur enthalten, profitieren von der Verwendung schwacher Referenzen. Die Verwendung von schwachen Referenzen in solchen Situationen ermöglicht die Bereinigung nicht verwendeter Referenzobjekte und der damit verbundenen schwachen Referenzen.
In der Computerprogrammierung wird normalerweise standardmäßig eine starke Referenz erstellt, wenn ein Objekt erstellt wird, und der vom Objekt belegte Speicher bleibt zugewiesen, solange die starke Referenz funktionsfähig bleibt. Ein starker Verweis wird aufgehoben und der Speicher des zugehörigen Objekts wird freigegeben, kurz nachdem ein starker Verweis und sein Objekt als nicht mehr von einem Programm verwendet gekennzeichnet wurden. In bestimmten Situationen, z. B. bei Anwendungen zur Socket-Programmierung oder Bildbearbeitung, verfügen die zum Erstellen von Arbeitsobjekten verwendeten Klassen nicht über die integrierte Kapazität zum Speichern zusätzlicher Informationen, die für eine bestimmte Anwendung erforderlich sind. Die zusätzlichen Details für vorübergehende Objekte wie Verbindungen oder Bilder müssen in zusätzlichen Cache-Objekten gespeichert und durch Verweise mit den vorübergehenden Objekten verknüpft werden. Wenn eine schwache Referenz anstelle einer starken Referenz verwendet wird, sind die zusätzlichen Informationen nicht an die Referenz gebunden und können vom Garbage Collector aus dem Cache entfernt werden, sobald das referenzierte Objekt als nicht lebensfähig markiert wurde.
Schwache Referenzklassen sind normalerweise in Sprachen verfügbar, die durch Garbage Collection-Subsysteme wie Java, Python, Perl, C # und .NET Framework erweitert werden. In C ++ sind Programmierer normalerweise für die Speicherbereinigung verantwortlich. Diese Sprache hat eine Smart Pointer-Klasse implementiert, die einige der gleichen Funktionen bietet, die schwache Verweise und Garbage Collection bieten, und so dazu beiträgt, Speicherverluste zu reduzieren, die durch eine falsche Zeigerbereinigung verursacht werden.
Um die Speicherverwaltung weiter zu vereinfachen, können Sprachen mit Speicherbereinigungseinrichtungen zusätzlich die Funktionalität einer Sprache verbessern, indem feinere Gradienten von Referenzen als die starke oder schwache Referenz bereitgestellt werden. In diesen Sprachen können Datentypen wie Soft-Referenzen und Phantom-Referenzen enthalten sein, wodurch unterschiedliche Ebenen der Objektwiedererfassung oder Freigabe-Benachrichtigung möglich sind. Programmierer, die Sprachen mit automatisierter Speicherbereinigung verwenden, sollten sich mit allen verfügbaren Referenzklassen vertraut machen, um die Anwendungsleistung zu verbessern.