Java Language
Referenstyper
Sök…
Olika referenstyper
paketet java.lang.ref
tillhandahåller referensobjektklasser, som stöder en begränsad grad av interaktion med sopor.
Java har fyra huvudsakliga olika referenstyper. Dom är:
- Stark referens
- Svag referens
- Mjuk referens
- Fantomreferens
1. Stark referens
Detta är den vanliga formen för att skapa objekt.
MyObject myObject = new MyObject();
Variabelhållaren har en stark referens till det skapade objektet. Så länge denna variabel är live och har detta värde kommer MyObject
instansen inte att samlas in av avfallssamlaren.
2. Svag referens
Om du inte vill behålla ett objekt längre och du måste rensa / frigöra minnet som tilldelats ett objekt så snart som möjligt, är detta sättet att göra.
WeakReference myObjectRef = new WeakReference(MyObject);
En svag referens är helt enkelt en referens som inte är tillräckligt stark för att tvinga ett objekt att förbli i minnet. Svaga referenser tillåter dig att utnyttja skräpkollektorns förmåga att bestämma tillgängligheten för dig, så att du inte behöver göra det själv.
När du behöver objektet du skapade använder du .get()
metoden .get()
:
myObjectRef.get();
Följande kod exemplifierar detta:
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. Mjuk referens
Mjuka referenser är något starkare än svaga referenser. Du kan skapa ett mjukt refererat objekt enligt följande:
SoftReference myObjectRef = new SoftReference(MyObject);
De kan hålla fast i minnet starkare än den svaga referensen. Om du har tillräckligt med minnesförsörjning / resurser kommer avfallssamlaren inte att rengöra de mjuka referenserna lika entusiastiskt som svaga referenser.
Mjuka referenser är praktiska att använda vid cache. Du kan skapa mjuka refererade objekt som en cache, där de hålls tills ditt minne tar slut. När ditt minne inte kan tillhandahålla tillräckliga resurser tar avfallssamlaren bort mjuka referenser.
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. Fantomreferens
Detta är den svagaste referenstypen. Om du skapade en objektreferens med Phantom Reference get()
metoden get()
alltid att returnera noll!
Användningen av denna referens är att "Fantomreferensobjekt, som är förhindrade efter samlaren bestämmer att deras referenser annars kan återkrävas. Fantomreferenser används oftast för att schemalägga åtgärden före mortem på ett mer flexibelt sätt än vad som är möjligt med Java-slutföringsmekanism. " - Från Phantom Reference Javadoc från Oracle.
Du kan skapa ett objekt med Phantom Reference enligt följande:
PhantomReference myObjectRef = new PhantomReference(MyObject);