Rumah  >  Artikel  >  Java  >  Apakah punca kebocoran memori kelas dalam Java?

Apakah punca kebocoran memori kelas dalam Java?

WBOY
WBOYke hadapan
2023-04-21 23:40:171196semak imbas

Analisis Sebab

1 Jika kelas dalaman tanpa nama tidak dirujuk, terdapat peluang untuk mengitar semula apabila objek kelas dalaman tanpa nama digunakan.

2. Jika kelas dalam hanya dirujuk dalam kelas luar, apabila kelas luar tidak lagi dirujuk, kelas luar dan kelas dalam boleh dikitar semula melalui GC.

Apabila rujukan kelas dalam dirujuk oleh kelas lain selain daripada kelas luar, kelas dalam dan kelas luar tidak boleh dikitar semula oleh GC Walaupun kelas luar tidak dirujuk, kelas dalam masih mempunyai a rujukan kepada kelas luar).

Contoh

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.");
    }
}

Atas ialah kandungan terperinci Apakah punca kebocoran memori kelas dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam