RtsFlags.GcFlags.maxStkSize = (8 * 1024 * 1024) / sizeof(W_);
RtsFlags.GcFlags.initialStkSize = 1024 / sizeof(W_);
- RtsFlags.GcFlags.minAllocAreaSize = (256 * 1024) / BLOCK_SIZE;
+ RtsFlags.GcFlags.minAllocAreaSize = (512 * 1024) / BLOCK_SIZE;
RtsFlags.GcFlags.minOldGenSize = (1024 * 1024) / BLOCK_SIZE;
RtsFlags.GcFlags.maxHeapSize = 0; /* off by default */
RtsFlags.GcFlags.heapSizeSuggestion = 0; /* none */
#ifdef RTS_GTK_FRONTPANEL
RtsFlags.GcFlags.frontpanel = rtsFalse;
#endif
+ RtsFlags.GcFlags.idleGCDelayTicks = 300 / TICK_MILLISECS; /* ticks */
#ifdef DEBUG
RtsFlags.DebugFlags.scheduler = rtsFalse;
" -c<n> Auto-enable compaction of the oldest generation when live data is",
" at least <n>% of the maximum heap size set with -M (default: 30%)",
" -c Enable compaction for all major collections",
+#if defined(THREADED_RTS)
+" -I<sec> Perform full GC after <sec> idle time (default: 0.3, 0 == off)",
+#endif
"",
" -t<file> One-line GC statistics (default file: <program>.stat)",
" -s<file> Summary GC statistics (with -Sstderr going to stderr)",
break;
#endif
+ case 'I': /* idle GC delay */
+ if (rts_argv[arg][2] == '\0') {
+ /* use default */
+ } else {
+ I_ cst; /* tmp */
+
+ /* Convert to ticks */
+ cst = (I_) ((atof(rts_argv[arg]+2) * 1000));
+ if (cst > 0 && cst < TICK_MILLISECS) {
+ cst = TICK_MILLISECS;
+ } else {
+ cst = cst / TICK_MILLISECS;
+ }
+ RtsFlags.GcFlags.idleGCDelayTicks = cst;
+ }
+ break;
+
case 'S':
RtsFlags.GcFlags.giveStats = VERBOSE_GC_STATS;
goto stats;