Maison  >  Article  >  Java  >  Quelle est la cause de la fuite de mémoire de la classe interne Java ?

Quelle est la cause de la fuite de mémoire de la classe interne Java ?

WBOY
WBOYavant
2023-04-21 23:40:171106parcourir

Analyse des causes

1. Si la classe interne anonyme n'est pas référencée, il y aura une chance de recyclage lorsque les objets de la classe interne anonyme seront épuisés.

2. Si la classe interne est uniquement référencée dans la classe externe, lorsque la classe externe n'est plus référencée, la classe externe et la classe interne peuvent être recyclées via GC.

Lorsque la référence de classe interne est référencée par d'autres classes que la classe externe, la classe interne et la classe externe ne peuvent pas être recyclées par GC Même si la classe externe n'est pas référencée, la classe interne a toujours une référence à la classe externe. classe).

Instances

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer