| 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 and win32. |
| |
| GC_INITIAL_HEAP_SIZE=<bytes> - Initial heap size in bytes. May speed up |
| process start-up. |
| |
| GC_MAXIMUM_HEAP_SIZE=<bytes> - Maximum collected heap size. |
| |
| 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_DUMP_REGULARLY - Generate a GC debugging dump GC_dump() on startup |
| and during every collection. Very verbose. Useful |
| if you have a bug to report, but please include only the |
| last complete dump. |
| |
| GC_BACKTRACES=<n> - Generate n random backtraces (for heap profiling) after |
| each GC. Collector must have been built with |
| KEEP_BACK_PTRS. This won't generate useful output unless |
| most objects in the heap were allocated through debug |
| allocators. This is intended to be only a statistical |
| sample; individual traces may be erroneous due to |
| concurrent heap mutation. |
| |
| 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 . |
| |
| GC_RETRY_SIGNALS, GC_NO_RETRY_SIGNALS - Try to compensate for lost |
| thread suspend signals in linux_threads.c. On by |
| default for GC_OSF1_THREADS, off otherwise. Note |
| that this does not work around a possible loss of |
| thread restart signals. This seems to be necessary for |
| some versions of Tru64. Since we've previously seen |
| similar issues on some other operating systems, it |
| was turned into a runtime flag to enable last-minute |
| work-arounds. |
| |
| GC_IGNORE_FB[=<n>] - (Win32 only.) Try to avoid treating a mapped |
| frame buffer as part of the root set. Certain (higher end?) |
| graphics cards seems to result in the graphics memory mapped |
| into the user address space as writable memory. |
| Unfortunately, there seems to be no systematic way to |
| identify such memory. Setting the environment variable to n |
| causes the collector to ignore mappings longer than n MB. |
| The default value of n is currently 15. (This should cover |
| a 16 MB graphics card, since the mapping appears to be slightly |
| shorter than all of graphics memory. It will fail if a dll |
| writes pointers to collectable objects into a data segment |
| whose length is >= 15MB. Empirically that's rare, but |
| certainly possible.) WARNING: Security sensitive applications |
| should probably disable this feature by setting |
| GC_disallow_ignore_fb, or by building with -DNO_GETENV, |
| since small values could force collection of reachable |
| objects, which is conceivably a (difficult to exploit) |
| security hole. GC_IGNORE_FB values less than 3 MB |
| are never honored, eliminating this risk for most, |
| but not all, applications. This feature is likely to disappear |
| if/when we find a less disgusting "solution". |
| |
| 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. Forces a |
| collection at program termination to detect leaks that would |
| otherwise occur after the last GC. |
| |
| GC_ALL_INTERIOR_POINTERS - Turns on GC_all_interior_pointers and thus interior |
| pointer recognition. |
| |
| GC_DONT_GC - Turns off garbage collection. Use cautiously. |