【发布时间】:2017-06-28 15:27:45
【问题描述】:
比方说,我们有一个很长的线程:
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() 获得的硬引用上下文会泄漏内存吗?
-是否应该在每次需要上下文时调用 contextRef 以避免泄漏?
-WeakReference.get()方法通过JNI调用native方法,get()方法调用开销大吗?
【问题讨论】:
标签: java multithreading performance memory-leaks weak-references