In .NET, the garbage collector runs when the application is running low on memory or when a generation (typically generation 0) becomes full. It's not triggered by time elapsed (eliminating A), does not run on fixed intervals (eliminating B), and is not truly random (eliminating D). The CLR manages GC based on memory pressure and allocation patterns.