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


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

總計有5個系列

 

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

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

Runtime.getRuntime().gc();

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM