溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中內(nèi)部類出現(xiàn)內(nèi)存泄漏的原因是什么

發(fā)布時間:2021-04-29 17:04:44 來源:億速云 閱讀:413 作者:Leah 欄目:編程語言

這篇文章給大家介紹java中內(nèi)部類出現(xiàn)內(nèi)存泄漏的原因是什么,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

Java是什么

Java是一門面向?qū)ο缶幊陶Z言,可以編寫桌面應用程序、Web應用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應用程序。

1、原因分析

(1)匿名內(nèi)部類沒有被引用的話,匿名內(nèi)部類的對象用完的話就有回收的機會。

(2)如果內(nèi)部類別只是在外部類別中引用,當外部類別不再引用時,外部類別和內(nèi)部類別可以通過GC回收。

(3)內(nèi)部類引用被外部類以外的其他類引用時,內(nèi)部類和外部類不能被GC回收,即使外部類不被引用,內(nèi)部類也有指向外部類的引用)。

2、實例

public class ClassOuter {
 
    Object object = new Object() {
        public void finalize() {
            System.out.println("inner Free the occupied memory...");
        }
    };
 
    public void finalize() {
        System.out.println("Outer Free the occupied memory...");
    }
}
 
public class TestInnerClass {
    public static void main(String[] args) {
        try {
            Test();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
 
    private static void Test() throws InterruptedException {
        System.out.println("Start of program.");
 
        ClassOuter outer = new ClassOuter();
        Object object = outer.object;
        outer = null;
 
        System.out.println("Execute GC");
        System.gc();
 
        Thread.sleep(3000);
        System.out.println("End of program.");
    }
}

關(guān)于java中內(nèi)部類出現(xiàn)內(nèi)存泄漏的原因是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI