Java:使用jlibs保证垃圾收集

Cha*_*ani 4 java garbage-collection

来自jlibs的RuntimeUtil.java 的以下片段保证GC完成垃圾收集.

既然,它也使用System.gc(),我不明白他们怎么能保证它会100%发生.

以下是片段:

/**
     * This method guarantees that garbage collection is
     * done unlike <code>{@link System#gc()}</code>
     */
    public static void gc(){
        Object obj = new Object();
        WeakReference ref = new WeakReference<Object>(obj);
        obj = null;
        while(ref.get()!=null)
            System.gc();
    }
Run Code Online (Sandbox Code Playgroud)

Har*_*hra 5

它与Garbae Collection的强参考弱参考有关.

强引用是一种普通的Java引用,是您每天使用的类型.

如果通过一系列强引用(强可访问)可以访问对象,则它不符合垃圾回收的条件.由于您不希望垃圾收集器销毁您正在处理的对象,因此这通常正是您想要的.

简单地说,弱引用是一个不足以强迫对象保留在内存中的引用.弱引用允许您利用垃圾收集器确定可访问性的能力

尖头类中的gc()方法适用于此概念.

     /**
       * This method guarantees that garbage collection is
       * done unlike <code>{@link System#gc()}</code>
       */

       public static void gc(){
            Object obj = new Object();
            WeakReference ref = new WeakReference<Object>(obj);
            obj = null;
            while(ref.get()!=null)
                System.gc();
        }
Run Code Online (Sandbox Code Playgroud)

一旦WeakReference开始返回null,它指向的对象就变成了垃圾,WeakReference对象几乎没用.这通常意味着需要进行某种清理;

这就是为什么他们保证100%的时间都会发生这种情况.