Provokes garbage collection on (nearly) every memory allocation. Intended to ferret out memory protection bugs. Also makes R run very slowly, unfortunately.
gctorture(on = TRUE)
gctorture2(step, wait = step, inhibit_release = FALSE)
logical; turning it on/off.
integer; run GC every step
allocations; step
= 0
turns the GC torture off.
integer; number of allocations to wait before starting GC torture.
logical; do not release free objects for re-use: use with caution.
Previous value of first argument.
Calling gctorture(TRUE)
instructs the memory manager to force a
full GC on every allocation. gctorture2
provides a more refined
interface that allows the start of the GC torture to be deferred and
also gives the option of running a GC only every step
allocations.
The third argument to gctorture2
is only used if R has been
configured with a strict write barrier enabled. When this is the case
all garbage collections are full collections, and the memory manager
marks free nodes and enables checks in many situations that signal an
error when a free node is used. This can help greatly in isolating
unprotected values in C code. It does not detect the case where a
node becomes free and is reallocated. The inhibit_release
argument can be used to prevent such reallocation. This will cause
memory to grow and should be used with caution and in conjunction with
operating system facilities to monitor and limit process memory use.
gctorture2
can also be invoked via environment variables at the
start of the R session. R_GCTORTURE
corresponds to the
step
argument, R_GCTORTURE_WAIT
to wait
, and
R_GCTORTURE_INHIBIT_RELEASE
to inhibit_release
.