[JAVA] WeakReference-Funktionsprüfung

Überprüfen Sie die Funktion von Java Weak Reference.

import java.lang.ref.WeakReference;
import java.util.WeakHashMap;

public class Main {

    static class Entry{
        private final String name;

        public Entry(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return name;
        }
    }

    public static void main(String[] args) {
        var val = new Entry("Hello");
        var ref = new WeakReference<>(val);

        System.out.println("ref: "+ val + ", weak-ref: "+ ref.get());

        System.out.println("gc");
        System.gc();

        System.out.println("ref: "+ val + ", weak-ref: "+ ref.get());

        System.out.println("e = null");
        val = null;

        System.out.println("gc");
        System.gc();

        System.out.println("ref: "+ val + ", weak-ref: "+ ref.get());
    }
}

Das Ausführungsergebnis ist wie folgt.

ref: Hello, weak-ref: Hello
gc
ref: Hello, weak-ref: Hello
e = null
gc
ref: null, weak-ref: null

Apropos, var e = "Hello"; Aber ich habe das gleiche Ergebnis erwartet, aber es blieb ohne GC.

ref: Hello, weak-ref: Hello
gc
ref: Hello, weak-ref: Hello
e = null
gc
ref: null, weak-ref: Hello

Wahrscheinlich, weil der Code selbst "Hallo" enthält, ist es sehr wahrscheinlich, dass er nicht für GC bestimmt war. Daher wurde das gleiche Ergebnis durch explizit neues wie folgt erhalten.

var e = new String("Hello");

Beachten Sie, dass valueOf ohne Berechtigung zwischengespeichert wird, auch wenn Sie es mit Integer anstelle von String versuchen.

Recommended Posts

WeakReference-Funktionsprüfung
Überprüfen Sie den Betrieb mit dem Steg mit Maven.
Erstellen Sie mit Docker eine TensorFlow-Betriebsüberprüfungsumgebung
Überprüfen Sie die Funktion der Schnittstelle über den Thread