實戰Java虛擬機之四:提高性能,禁用System.gc() ?

今天開始實戰Java虛擬機之四:「禁用System.gc()」。java

總計有5個系列app

        默認狀況下,System.gc()會顯式直接觸發Full GC,同時對老年代和新生代進行回收。而通常狀況下咱們認爲,垃圾回收應該是自動進行的,無需手工觸發。若是過於頻繁地觸發垃圾回收對系統性能是沒有好處的。所以虛擬機提供了一個參數DisableExplicitGC來控制是否手工觸發GC。code

       System.gc()的實現以下所示:orm

Runtime.getRuntime().gc();

    Runtime.gc()是一個native方法,最終實如今jvm.cpp中,以下所示:ci

JVM_ENTRY_NO_ENV(void, JVM_GC(void))
 JVMWrapper("JVM_GC");
  if (!DisableExplicitGC) {
   Universe::heap()->collect(GCCause::_java_lang_system_gc);
  }
JVM_END


    能夠看到,若是設置了-XX:-+DisableExplicitGC,條件判斷就沒法成立,那麼就會禁用顯式GC,使得System.gc()等價於一個空函數調用。


節選自

25612fm立體圖

《實戰Java虛擬機》一書Q交流羣:397196583

相關文章
相關標籤/搜索