簡體   English   中英

WeakReference<> 在這種特定情況下是否有助於 GC?

[英]Does WeakReference<> helps with GC on this specific scenario?

我不確定從長遠來看這是否會給我帶來一些內存泄漏問題,我想知道在這種情況下使用弱引用是否有什么不同:

public abstract class ChangeObserver<X extends SomeClass> {

   X someClass;

   public ChangeObserver(X someClass) {
       this.someClass= someClass;
   }

   public void notifySomeClass(
   ) {
       onChanged().onChanged(someClass);
   }

   public abstract OnDataChanged<X> onChanged();

   @FunctionalInterface
   public interface OnDataChanged<X> {
       void onChanged(X x);
   }

}

這會在程序的生命周期中引起問題嗎? 它會通過使用弱引用來解決嗎?

感謝@Hulk 和@tashkhisi,我提供了這個解決方案,如果有什么遺漏,請不要猶豫,糾正它。

public abstract class ChangeObserver<X extends SomeClass> {

    private WeakReference<X> someClassWeakRef;
    private OnDataChanged<X> observer;

    public ChangeObserver(X someClass) {
        this.someClassWeakRef = new WeakReference<>(someClass);
        observer = onChanged();
    }

    public void notifySomeClass(
    ) {
        observer.onChanged(someClassWeakRef.get());
    }

    public abstract OnDataChanged<X> onChanged();

    @FunctionalInterface
    public interface OnDataChanged<X> {
        void onChanged(X x);
    }

}

我仍然缺少的是這個 removeObserver() 方法究竟應該做什么來刪除觀察者,如果我要使用該特定方法來避免內存泄漏,是否只是簡單地設置觀察者 = null ?

提前致謝。

是的,在 Java 中的Observer模式中有很多解決內存泄漏的方法,其中之一是將另一種方法(如removeObserver添加到您的類中,以便在您不再需要它們時從Observable刪除觀察者對象,第二種方法是使用 Wea​​k參考如下:(我寧願將其命名為someObject而不是someClass但我遵守了您的命名約定)

WeakReference<X> x = new WeakReference<X>(someClass); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM