Ras*_*ber 2 java garbage-collection jvm
刚刚遇到如下代码(稍微简化):
/* periodically requests garbagecollect to improve memory usage and 
   garbage collect performance under most JVMs */
static class GCThread implements Runnable {
    public void run() {
        while(true) {
            try {
              Thread.sleep(300000);
            } catch (InterruptedException e) {}
            System.gc();           
        }
    }
}
Thread gcThread = new Thread(new GCThread());
gcThread.setDaemon(true);
gcThread.start();
我尊重代码的作者,但不再可以轻松地要求他在顶部的评论中为自己的断言辩护。
这是真的?与我的直觉相悖的是,这个小小的 hack 应该可以改进任何东西。我希望 JVM 能够更好地决定何时执行集合。
代码在一个 Web 应用程序中运行,该应用程序在 Z/OS 上的 IBM WebSphere 中运行。
这取决于。
JVM 可以完全忽略,System.gc()所以这段代码什么都不做。
其次,GC 具有成本影响。如果您的程序不会以其他方式执行 GC(例如,它不会产生太多垃圾,或者它有一个巨大的堆并且永远不需要 GC),那么此代码将增加开销。
如果程序通常只使用次要 GC 运行,而此代码导致了一次主要 GC,则会产生负面影响。
总而言之,这种优化绝对没有任何意义,除非您有具体的证据表明它提供了好处,并且每次程序发生重大变化时都需要重新评估该证据。