A programozásban a gyenge hivatkozás a dinamikusan létrehozott objektumokra való hivatkozás egy speciális típusa hulladékgyűjtéssel vagy hivatkozásszámlálással rendelkező rendszerekben . Az erős hivatkozásoktól abban különbözik, hogy a szemétgyűjtő a törölni kívánt objektumok azonosításakor nem veszi figyelembe a hivatkozás és a halmon lévő objektum kapcsolatát. Így a gyenge hivatkozás lehetővé teszi, hogy egy objektummal úgy dolgozzon, mint egy erős hivatkozás, de ha szükséges, az objektum törlődik, még akkor is, ha gyenge hivatkozás van rá. A közönséges hivatkozásokat néha "erős" hivatkozásoknak nevezik a szemétszállítással összefüggésben.
A gyenge hivatkozás fogalma létezik azokban a rendszerekben és programozási nyelvekben , ahol a szemétgyűjtés támogatott - az objektumok automatikus eltávolítása a memóriából , amelyek használata megszűnt, és a továbbiakban nem folytatódik. A szemétgyűjtés tárgyát képező objektumok meghatározásához az elérhetőségi algoritmus egyik vagy másik verzióját használják - egy objektum akkor tekinthető elérhetőnek, ha van legalább egy hivatkozás a programban. Ha egy objektumra egyetlen hivatkozás sem maradt a programban, vagyis az objektum használata megszűnt, akkor az adott objektum a következő megfelelő pillanatban törölhető.
A leírt memóriafelszabadítási mechanizmus bizonyos esetekben memóriaszivárgást generálhat "elfelejtett" hivatkozások miatt, amikor a létrehozott objektumokra vonatkozó hivatkozások több helyen tárolódnak, és amikor az objektumot már nem használják, a programozó nem törli az összeset. A problémák elkerülése érdekében a programozó kénytelen betartani egy meglehetősen merev fegyelmet a hivatkozások használatában, ami nem mindig kényelmes.
Az ehhez hasonló problémák elkerülése érdekében egy programozási nyelv vagy környezet támogathatja az úgynevezett gyenge hivatkozásokat . Az ilyen hivatkozásokat ugyanúgy használják, mint a közönséges hivatkozásokat, de nem befolyásolják a szemétgyűjtést, mivel a hivatkozásszámláló mechanizmus nem veszi figyelembe őket, és az objektum, amelyre ilyen hivatkozások léteznek, törölhető, kivéve, ha vannak szokásos hivatkozások azt (amelyet ebben az összefüggésben "erős kapcsolatoknak" nevezhetünk).
A ma már elterjedt szemétgyűjtő programozási nyelvekben, a Java -ban és a C# -ban a gyenge hivatkozások rendszerkönyvtárak szintjén támogatottak. Java-ban a és osztályok szolgálnak erre , C#-ban a . java.lang.ref.WeakReferencejava.lang.ref.SoftReferenceSystem.WeakReference
A gyenge hivatkozások használatának eljárása alapvetően minden rendszerben azonos.
A gyenge hivatkozások felhasználási módját a feladat határozza meg. Gyakori gyakorlat az, hogy a gyűjteményekben gyenge hivatkozásokat tárolnak az objektumokra, amelyekre csak addig van szükség, amíg az alkalmazás ezeket az objektumokat használja. Amikor egy objektumra már nincs szükség, és a rá vonatkozó erős hivatkozásokat eltávolítják, a gyűjteményben tárolt gyenge hivatkozások nem akadályozzák meg az objektum eltávolítását a memóriából, így szükségtelenné válik kifejezetten eltávolítani őket a gyűjteményből.
A Java SoftReference osztályának egyik jellemzője, hogy egy objektum törlésekor a szemétgyűjtő figyelembe veszi a hivatkozáson keresztüli elérésének gyakoriságát, ami hasznos lehet például a külső eszközökön - a gyorsítótáron - található adatok gyorsítótárazásához. A gyűjtemény automatikusan tárolja azokat az objektumokat, amelyekhez hosszabb ideig fér hozzá.
Annak megakadályozására, hogy a már nem létező objektumokra való gyenge hivatkozások szennyezzék a memóriát, a rendszerkönyvtárak mechanizmusokat biztosítanak az ilyen hivatkozások figyelembevételére. Ennek a mechanizmusnak egy változata a hivatkozási sorok – olyan speciális objektumok, amelyeket a létrehozásakor adnak át a hivatkozónak. Amikor a szemétgyűjtő megsemmisíti a gyenge hivatkozással hivatkozott objektumot, hivatkozást helyez el a megfelelő hivatkozásra az előzőleg átadott hivatkozási sorba. Így a „halott” hivatkozásokat tartalmazó hivatkozók listája a program rendelkezésére áll, és bármikor törölheti azokat.