Garbage Collection - Comment collecter manuellement des objets en Java
为情所困
为情所困 2017-05-17 10:05:31
0
5
1083

Commençons par le code. Mon objectif est de faire disparaître complètement les données

.
public class Test {
    public static void main(String[] args) {
        Data data = new Data();
        data.num = 10;

        Data new1 = data;
        Data new2 = data;
        new2 = null;
        data = null;
        System.out.println(new1.num);
    }

}

class Data {
    int num;
}

Je connais le mécanisme de récupération de place de Java. Tant que quelque chose y fait toujours référence, il ne disparaîtra pas. Le code ci-dessus peut toujours afficher 10 normalement.
Mais je veux savoir comment créer System.out .println(new1. .num); renvoie une exception null, ce qui signifie qu'il n'existe aucune donnée de ce typeSystem.out.println(new1.num);抛出null异常,即彻底没有这个数据
不要说让new1=nullNe dites pas simplement que new1=null se porte bien

为情所困
为情所困

répondre à tous(5)
迷茫

Vous l'avez dit vous-même : "Je connais le mécanisme de récupération de place de Java. Tant que quelque chose y fait référence, il ne disparaîtra pas." La variable "new1" fait toujours référence à la mémoire de "new Data()" dans le tas. , comment pourrait-il être recyclé, afin que le code que nous écrivons ne soit pas uniquement constitué d'exceptions de pointeur nul. Vous pouvez utiliser WeakReference au lieu d'une référence forte.

    WeakReference<Data> new1 = new WeakReference(data);
    Data new2 = data;
    new2 = null;
    data = null;
    System.gc();//告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的 ,所以下面延迟2秒
    try {
      Thread.sleep(2000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    System.out.println(new1.get().num);
我想大声告诉你
System.gc();

Il est recommandé que la JVM exécute gc, qui peut être complètement rejetée. Le GC lui-même s'exécutera automatiquement périodiquement et la JVM déterminera le moment de l'exécution. De plus, la version actuelle propose une variété de modes plus intelligents et effectuera automatiquement des sélections en fonction de la machine sur laquelle elle s'exécute, même si elle existe. sont en effet des améliorations de performances. Si nécessaire, vous devez également affiner le mécanisme de fonctionnement du GC au lieu d'optimiser les performances en utilisant cette commande.

Ty80

Les objets qui ont des références d'objet et sont sur le point d'être supprimés peuvent toujours être définis sur null

    {
        OutClass outClass1 = new OutClass();
        OutClass outClass2 = new OutClass();
        outClass2.outClass = outClass1;
        outClass1 = null;
        System.out.print(outClass1);
    }
    
    class OutClass {
        public OutClass outClass;
    }
左手右手慢动作

Avant de comprendre les principes de JMM, n'utilisez jamais System.gc() sans discernement, juste obj=null lorsque l'objet est épuisé.

滿天的星座

La réponse est non. Il s'agit d'un comportement non défini dans la spécification JVM. Les développeurs ne doivent pas essayer d'aider manuellement la machine virtuelle à recycler un objet. S'il s'agit du JDK de Sun, il semble y avoir un package dangereux, mais je ne l'ai jamais utilisé et je ne sais pas s'il existe une telle API.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal