我々は、のは言う非常に長いスレッドましょう、持っている:質問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();
}
はすべて自分自身の言葉:WeakReference.get(から得
-Wouldハード参照コンテキスト)メモリリークが発生?
- 漏れを防ぐために、コンテキストが必要なたびにcontextRefを呼び出す必要がありますか?
-WeakReference.get()メソッドは、JNIを介してネイティブメソッドを呼び出し、get()メソッドコールが高価になりますか?
この質問はAndroidに少し焦点が当てられています。 AndroidのGCは、ContextオブジェクトをGCingすることでメモリを再利用することができます。このようにして、オブジェクトはまだ使用できますが、問題になる可能性もあります。だから、私の質問は、WeakReference.get()の結果を参照するとGCがオブジェクトをクリアするのを避けることができる場合です。 – BamsBamx
@BamsBamx強い参照は、他に何があってもオブジェクトが収集されるのを常に防ぎます。 –
です。この場合、WeakReference.get()の結果をハードリファレンスすることは、MyRunnableコンストラクタで渡された 'リーク可能な'オブジェクトをハード参照することと同じですか? – BamsBamx