Wir haben, sagen wir mal, einen sehr langen Faden:Könnte ein Hard-Verweis auf WeakReference.get() Objekt Speicherverlust verursachen?
private static class MyRunnable implements Runnable {
private final WeakReference<Context> contextRef;
private MyRunnable(Context leakable) {
contextRef = new WeakReference<>(leakable);
}
@Override public void run() {
Context context = contextRef.get();
if (context == null) return;
//VERY LONG TASK
//Would hard referencing context gotten from WeakReference.get() leak memory?
//Should contextRef be called each time context is needed?
}
}
private void startThread() {
new MyThread(this, new MyRunnable(this)).start();
}
Die Fragen sagt alles selbst:
-Would hart Referenzierung Kontext von WeakReference.get() ein Speicherleck bekommen?
-Sollte contextRef jeden Kontext aufgerufen werden benötigt, um undichten zu vermeiden?
-Der WeakReference.get() -Methode eine native Methode durch JNI nennt, wäre get() Methodenaufruf teuer?
Diese Frage ist ein bisschen auf Android konzentriert. Der GC in Android könnte Speicher wiederherstellen, indem er das Context-Objekt per GC einloggt. Wenn das Kontextobjekt hart referenziert wird, ist dies nicht möglich. Auf diese Weise könnte das Objekt noch benutzt werden, könnte aber auch ein Problem darstellen. So ist meine Frage, ob das Fest Referenzierung WeakReference.get() Ergebnis würde die GC vermeiden, das Objekt zu löschen – BamsBamx
@BamsBamx eine starke Referenz immer verhindert ein Objekt, egal gesammelt werden, was Sie sonst noch tun. –
Also, in diesem Fall: Hard-Referenzierung der WeakReference.get() -Ergebnis ist das gleiche wie Hard-Referenzierung 'Leakable' Objekt im MyRunnable-Konstruktor übergeben? – BamsBamx