硬引用WeakReference.get()对象会导致内存泄漏吗?

BamsBamx

我们有一个很长的线程:

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调用本机方法,get()方法调用会昂贵吗?

彼得·劳瑞

是否会从WeakReference.get()泄漏内存中获得硬引用上下文?

如果仍在使用对象,则不会将其视为内存泄漏。如果要保留不需要的内存,这可能是一个问题。您可以在不再需要该字符串引用时清除/丢弃它。

对对象的弱引用不会改变任何强引用的行为。

每次需要上下文时都应该调用contextRef以避免泄漏吗?

仅当您确定它消失时,您才能执行此操作。如果需要此方法返回对象(甚至在调用run()之前),则需要保留字符串引用。

注意:您的示例在您第一次调用get()时可以返回,null但是如果它根本运行不重要,您是否可以根本不执行它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从WeakReference的get方法返回的强引用是否会导致AsyncTask onProgressUpdate中的内存泄漏?

保存对 Application 实例的引用会导致内存泄漏吗?

没有引用任务会导致内存泄漏吗?

引用数组索引是否会导致内存泄漏?

返回const引用或引用的方法会导致内存泄漏吗?

清空Array = []会导致内存泄漏吗?

Redux存储会导致内存泄漏吗?

该程序会导致内存泄漏吗?

goto LABEL会导致内存泄漏吗?

NavigableMap的subMap会导致内存泄漏吗?

双向WeakMap会导致内存泄漏吗?

Java的不断引用导致内存泄漏?

没有引用的对象的内存会自动清除吗?

传递给外部类的android View引用会造成内存泄漏吗?

Android WeakReference处理内存泄漏

在 MC 架构中,相互引用会导致内存泄漏。我如何改变一个好的设计程序?

如果引用仍然存在,是否不会在析构函数中删除指针会导致内存泄漏?

内存泄漏示例 - 引用和对象

递归Javascript对象会导致任何问题(内存泄漏)吗?

尽管没有对实际引用对象的强引用,但WeakReference不会返回null

WeakReference.get() 在没有强引用后可以返回非空值吗?

订阅自己的C#事件会导致内存泄漏吗?

用`new`调用默认参数会导致内存泄漏吗?

当此方法引发异常时,会导致内存泄漏吗?

释放unique_ptr会导致内存泄漏吗?

这段代码会导致 kotlin 内存泄漏吗

Android-mainThread处理程序会导致内存泄漏吗?

'new' 会导致 Java 中的内存泄漏吗?

永远不会解决的承诺会导致内存泄漏吗?