У нас есть, скажем, очень длинную нить:Может ли жесткая ссылка на объект WeakReference.get() вызвать утечку памяти?
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();
}
на вопросы, говорит все сам:
-Would трудно ссылки контекст получил от метода WeakReference.get() происходит утечка памяти?
-Высокий контекстRef вызывается каждый раз, когда необходим контекст, чтобы избежать утечки?
-Метод WeakReference.get() вызывает собственный метод через JNI, метод get() будет стоить дорого?
Этот вопрос немного сфокусирован на Android. GC в Android может восстановить память с помощью GC-ing объекта Context, поэтому, если контекстный объект трудно ссылаться, это не будет возможным. Таким образом, объект может быть использован, но также может быть проблемой. Итак, мой вопрос заключается в том, что если жесткий референтный результат WeakReference.get() не позволит GC очистить объект – BamsBamx
@BamsBamx, то сильная ссылка всегда предотвращает сбор объекта, независимо от того, что вы делаете. –
, так что в этом случае: жесткая привязка результата WeakReference.get() совпадает с результирующим «утешительным» объектом, переданным в конструкторе MyRunnable? – BamsBamx