Zoeken…


Verschillende referentietypen

java.lang.ref pakket java.lang.ref biedt referentie-objectklassen, die een beperkte mate van interactie met de vuilnisman ondersteunen.

Java heeft vier verschillende hoofdreferentietypen. Zij zijn:

  • Sterke referentie
  • Zwakke referentie
  • Zachte referentie
  • Fantoomreferentie

1. Sterke referentie

Dit is de gebruikelijke vorm om objecten te maken.

MyObject myObject = new MyObject();

De variabele houder houdt een sterke verwijzing naar het gemaakte object. Zolang deze variabele live is en deze waarde heeft, wordt de MyObject instantie niet verzameld door de vuilnisman.

2. Zwakke referentie

Als u een object niet langer wilt behouden en u het toegewezen geheugen voor een object zo snel mogelijk wilt wissen / vrijmaken, is dit de manier om dit te doen.

WeakReference myObjectRef = new WeakReference(MyObject);

Simpel gezegd, een zwakke referentie is een referentie die niet sterk genoeg is om een object te dwingen in het geheugen te blijven. Met zwakke referenties kunt u het vermogen van de vuilnisman gebruiken om de bereikbaarheid voor u te bepalen, zodat u dit niet zelf hoeft te doen.

Gebruik de methode .get() als u het object nodig hebt dat u hebt gemaakt:

myObjectRef.get();

De volgende code is hiervan een voorbeeld:

WeakReference myObjectRef = new WeakReference(MyObject);
System.out.println(myObjectRef.get()); // This will print the object reference address
System.gc();
System.out.println(myObjectRef.get()); // This will print 'null' if the GC cleaned up the object

3. Zachte referentie

Zachte referenties zijn iets sterker dan zwakke referenties. U kunt een zacht object waarnaar wordt verwezen als volgt maken:

SoftReference myObjectRef = new SoftReference(MyObject);

Ze kunnen het geheugen sterker vasthouden dan de zwakke referentie. Als je voldoende geheugen / bronnen hebt, maakt de vuilnisman de zachte verwijzingen niet zo enthousiast schoon als zwakke verwijzingen.

Zachte referenties zijn handig om te gebruiken in de cache. U kunt zachte objecten waarnaar wordt verwezen als cache maken, waar ze worden bewaard totdat uw geheugen opraakt. Als uw geheugen onvoldoende bronnen kan leveren, verwijdert de vuilnisman zachte verwijzingen.

SoftReference myObjectRef = new SoftReference(MyObject);
System.out.println(myObjectRef.get()); // This will print the reference address of the Object
System.gc();
System.out.println(myObjectRef.get()); // This may or may not print the reference address of the Object

4. Fantoomreferentie

Dit is het zwakste referentietype. Als u een objectverwijzing hebt gemaakt met Phantom Reference, retourneert de methode get() altijd null!

Het gebruik van deze verwijzing is dat "Phantom-referentieobjecten, die worden verzameld nadat de verzamelaar heeft bepaald dat hun referenten anders kunnen worden teruggevorderd. Fantoomreferenties worden meestal gebruikt voor het plannen van acties vóór het opruimen op een flexibelere manier dan mogelijk is met de Java-voltooiingsmechanisme. " - Van Phantom Reference Javadoc van Oracle.

U kunt een object van Phantom Reference als volgt maken:

PhantomReference myObjectRef = new PhantomReference(MyObject);


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow