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)",
" -Dl DEBUG: linker",
" -Dm DEBUG: stm",
"",
-#endif // DEBUG
+#endif /* DEBUG */
#if defined(SMP)
" -N<n> Use <n> OS threads (default: 1)",
#endif
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;
error = rtsTrue;
}
)
-#endif // PROFILING
+#endif /* PROFILING */
break;
#if defined(PROFILING)
void
setProgName(char *argv[])
{
- char *last_slash;
-
/* Remove directory from argv[0] -- default files in current directory */
- if ((last_slash = (char *) strrchr(argv[0],
#if !defined(mingw32_HOST_OS)
- '/'
-#else
- '\\'
-#endif
- )) != NULL) {
+ char *last_slash;
+ if ( (last_slash = (char *) strrchr(argv[0], '/')) != NULL ) {
prog_name = last_slash+1;
} else {
prog_name = argv[0];
}
+#else
+ char* last_slash = argv[0] + (strlen(argv[0]) - 1);
+ while ( last_slash > argv[0] ) {
+ if ( *last_slash == '/' || *last_slash == '\\' ) {
+ prog_name = last_slash+1;
+ return;
+ }
+ last_slash--;
+ }
+ prog_name = argv[0];
+#endif
}
void