Garbage Collection – So sammeln Sie Objekte manuell in Java
为情所困
为情所困 2017-05-17 10:05:31
0
5
959

Beginnen wir mit dem Code. Mein Ziel ist es, die Daten vollständig verschwinden zu lassen

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; }

Ich kenne den Garbage-Collection-Mechanismus von Java, solange noch etwas darauf verweist. Der obige Code kann immer noch 10 ausgeben.
Aber ich möchte wissen, wie manSystem.out .println(new1 .num);löst einenull-Ausnahme aus, was bedeutet, dass überhaupt keine derartigen Daten vorhanden sindSystem.out.println(new1.num);抛出null异常,即彻底没有这个数据
不要说让new1=nullSagen Sie nicht, dassnew1=nulleinfach in Ordnung sein soll

为情所困
为情所困

Antworte allen (5)
迷茫

你自己都说了"我知道java的垃圾回收机制,只有有东西还在引用他,他就不会消失", "new1"这个变量还在引用 "new Data()"在堆里那块内存,怎么可能会让他被回收,这样我们写的代码不全是空指针异常。你可以使用WeakReference,而不是强引用。

WeakReference 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();

    建议JVM执行gc,有可能完全被拒绝。 GC本身是会周期性的自动运行的,由JVM决定运行的时机,而且现在的版本有多种更智能的模式可以选择,还会根据运行的机器自动去做选择,就算真的有性能上的需求,也应该去对GC的运行机制进行微调,而不是通过使用这个命令来实现性能的优化。

      Ty80

      有对象引用即将删除的对象仍然可以置为null

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

        在你没有理解JMM原理之前,千万不要乱用System.gc(),对象用完obj=null;就可以了。

          滿天的星座

          答案是不能,这属于JVM规范中未定义的行为,开发者不应该试图手动的去帮助虚拟机回收一个对象。如果是sun的JDK,好像有一个unsafe的包,不过我没用过,不知道有没有这样的API。

            Neueste Downloads
            Mehr>
            Web-Effekte
            Quellcode der Website
            Website-Materialien
            Frontend-Vorlage
            Über uns Haftungsausschluss Sitemap
            Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!