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)
它与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%的时间都会发生这种情况.