15.4 Garbage Collection
Set the PLTDISABLEGC environment variable (to any value) before Racket starts to disable garbage collection.
In Racket 3m (the main variant of Racket), each garbage collection logs a message (see Logging) at the 'debug level. The data portion of the message is an instance of a gc-info prefab structure type with 10 fields as follows, but future versions of Racket may use a gc-info prefab structure with additional fields:
(struct gc-info (major? pre-amount pre-admin-amount code-amount post-amount post-admin-amount start-process-time end-process-time start-time end-time) #:prefab)
The major? field indicates whether the collection was a “major” collection that inspects all memory or a “minor” collection that mostly inspects just recent allocations. The pre-amount field reports place-local memory use (i.e., not counting the memory use of child places) in bytes at the time that the garbage collection started. The pre-admin-amount is a larger number that includes memory use for the garbage collector’s overhead (such as space on memory pages that is not yet used). The code-amount field reports additional memory use for generated native code (which is the same just before and after a garbage collection, since it is released via finalization). The post-amount and post-admin-amount fields correspond to pre-amount and pre-admin-amount, but after garbage collection. The start-process-time and end-process-time fields report processor time (in the sense of current-process-milliseconds) at the start and end of garbage collection; the difference is the processor time consumed by collection. The start-time and end-time fields report real time (in the sense of current-inexact-milliseconds) at the start and end of garbage collection; the difference is the real time consumed by garbage collection.
(collect-garbage) → void?
The collect-garbage procedure provides some control over the timing of collections, but garbage will obviously be collected even if this procedure is never called (unless garbage collection is disabled).
(current-memory-use [cust]) → exact-nonnegative-integer? cust : custodian? = #f
If cust is not provided, the estimate is a total reachable from any custodians.
When Racket is compiled without support for memory accounting, the estimate is the same (i.e., all memory) for any individual custodian; see also custodian-memory-accounting-available?.
(dump-memory-stats) → any