aboutsummaryrefslogblamecommitdiffstats
path: root/gc/doc/README.environment
blob: dc172093c3675b23770fe9113d548aed9f9c86d1 (plain) (tree)
1
2
                                                                          
                                                                        


























                                                                               







                                                                             

                                                             









                                                                           
 




















                                                                              



                                                                            



















                                                                               





                                                                              
The garbage collector looks at a number of environment variables which are
then used to affect its operation.  These are examined only on Un*x-like
platforms.

GC_INITIAL_HEAP_SIZE=<bytes> -	Initial heap size in bytes.  May speed up
				process start-up.

GC_LOOP_ON_ABORT - Causes the collector abort routine to enter a tight loop.
		   This may make it easier to debug, such a process, especially
		   for multithreaded platforms that don't produce usable core
		   files, or if a core file would be too large.  On some
		   platforms, this also causes SIGSEGV to be caught and
		   result in an infinite loop in a handler, allowing
		   similar debugging techniques.

GC_PRINT_STATS - Turn on as much logging as is easily feasible without
		 adding signifcant runtime overhead.  Doesn't work if
		 the collector is built with SMALL_CONFIG.  Overridden
		 by setting GC_quiet.  On by default if the collector
		 was built without -DSILENT.

GC_PRINT_ADDRESS_MAP - Linux only.  Dump /proc/self/maps, i.e. various address
		       maps for the process, to stderr on every GC.  Useful for
		       mapping root addresses to source for deciphering leak
		       reports.

GC_NPROCS=<n> - Linux w/threads only.  Explicitly sets the number of processors
	        that the GC should expect to use.  Note that setting this to 1
		when multiple processors are available will preserve
		correctness, but may lead to really horrible performance,
		since the lock implementation will immediately yield without
		first spinning.

GC_MARKERS=<n> - Linux w/threads and parallel marker only.  Set the number
		of marker threads.  This is normaly set to the number of
		processors.  It is safer to adjust GC_MARKERS than GC_NPROCS,
		since GC_MARKERS has no impact on the lock implementation.

GC_NO_BLACKLIST_WARNING - Prevents the collector from issuing
		warnings about allocations of very large blocks.
		Deprecated.  Use GC_LARGE_ALLOC_WARN_INTERVAL instead.

GC_LARGE_ALLOC_WARN_INTERVAL=<n> - Print every nth warning about very large
		block allocations, starting with the nth one.  Small values
		of n are generally benign, in that a bounded number of
		such warnings generally indicate at most a bounded leak.
		For best results it should be set at 1 during testing.
		Default is 5.  Very large numbers effectively disable the
		warning.

GC_IGNORE_GCJ_INFO - Ignore the type descriptors implicitly supplied by
		     GC_gcj_malloc and friends.  This is useful for debugging
		     descriptor generation problems, and possibly for
		     temporarily working around such problems.  It forces a
		     fully conservative scan of all heap objects except
		     those known to be pointerfree, and may thus have other
		     adverse effects.

GC_PRINT_BACK_HEIGHT - Print max length of chain through unreachable objects
		     ending in a reachable one.  If this number remains
		     bounded, then the program is "GC robust".  This ensures
		     that a fixed number of misidentified pointers can only
		     result in a bounded space leak.  This currently only
		     works if debugging allocation is used throughout.
		     It increases GC space and time requirements appreciably.
		     This feature is still somewhat experimental, and requires
		     that the collector have been built with MAKE_BACK_GRAPH
		     defined.  For details, see Boehm, "Bounding Space Usage
		     of Conservative Garbage Collectors", POPL 2001, or
		     http://lib.hpl.hp.com/techpubs/2001/HPL-2001-251.html .

The following turn on runtime flags that are also program settable.  Checked
only during initialization.  We expect that they will usually be set through
other means, but this may help with debugging and testing:

GC_ENABLE_INCREMENTAL - Turn on incremental collection at startup.  Note that,
		     depending on platform and collector configuration, this
		     may involve write protecting pieces of the heap to
		     track modifications.  These pieces may include pointerfree
		     objects or not.  Although this is intended to be
		     transparent, it may cause unintended system call failures.
		     Use with caution.

GC_PAUSE_TIME_TARGET - Set the desired garbage collector pause time in msecs.
		     This only has an effect if incremental collection is
		     enabled.  If a collection requires appreciably more time
		     than this, the client will be restarted, and the collector
		     will need to do additional work to compensate.  The
		     special value "999999" indicates that pause time is
		     unlimited, and the incremental collector will behave
		     completely like a simple generational collector.  If
		     the collector is configured for parallel marking, and
		     run on a multiprocessor, incremental collection should
		     only be used with unlimited pause time.

GC_FIND_LEAK - Turns on GC_find_leak and thus leak detection.

GC_ALL_INTERIOR_POINTERS - Turns on GC_all_interior_pointers and thus interior
			   pointer recognition.

GC_DONT_GC - Turns off garbage collection.  Use cautiously.