读书人

java垃圾回收那点事(1) System.gc开

发布时间: 2013-09-08 15:21:21 作者: rapoo

java垃圾回收那点事(一) System.gc开始说起

java提供了从语言角度能够强制jvm进行垃圾回收,在我们的程序中可以通过调用System.gc去强制jvm进行垃圾回收,通过源码我们可以看到实际上是调用了Runtime去强制gc

if (UseParallelGC) {#ifndef SERIALGC    Universe::_collectedHeap = new ParallelScavengeHeap();#else  // SERIALGC    fatal("UseParallelGC not supported in java kernel vm.");#endif // SERIALGC  } else if (UseG1GC) {#ifndef SERIALGC    G1CollectorPolicy* g1p = new G1CollectorPolicy_BestRegionsFirst();    G1CollectedHeap* g1h = new G1CollectedHeap(g1p);    Universe::_collectedHeap = g1h;#else  // SERIALGC    fatal("UseG1GC not supported in java kernel vm.");#endif // SERIALGC  } else {    GenCollectorPolicy *gc_policy;    if (UseSerialGC) {      gc_policy = new MarkSweepPolicy();    } else if (UseConcMarkSweepGC) {#ifndef SERIALGC      if (UseAdaptiveSizePolicy) {        gc_policy = new ASConcurrentMarkSweepPolicy();      } else {        gc_policy = new ConcurrentMarkSweepPolicy();      }#else   // SERIALGC    fatal("UseConcMarkSweepGC not supported in java kernel vm.");#endif // SERIALGC    } else { // default old generation      gc_policy = new MarkSweepPolicy();    }    Universe::_collectedHeap = new GenCollectedHeap(gc_policy);  }
从源码中我们可以看到

Parallel GC 是用的是ParallelScavengeHeap,

CMS 使用的是 GenCollectdHeap

G1使用的是G1CollectedHeap

读书人网 >系统运维

热点推荐