如何在Java中强制垃圾回收?

2022-08-31 05:32:47

是否有可能在Java中强制垃圾回收,即使这样做很棘手?我知道,但他们只建议做GC。如何强制GC?System.gc();Runtime.gc();


答案 1

你最好的选择是调用System.gc(),这只是向垃圾回收器暗示你希望它进行收集。没有办法强制和立即收集,因为垃圾回收器是非确定性的。


答案 2

jlibs 库有一个很好的用于垃圾回收的实用程序类。您可以使用带有 WeakReference 对象的漂亮小技巧强制垃圾回收。

RuntimeUtil.gc() from the jlibs:

   /**
    * 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();
     }
   }