Below is a screenshot from https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/background-gc
we know that background garbage collection is performed on one or more dedicated threads, depending on whether it's workstation or server GC, and applies only to generation 2 collections. and foreground garbage collection does generation 0 and 1 collections
my questions in regards to the picture are:
Q1. the red arrow in thread 1, what does "init GC" mean? I feel like it means thread 1 triggers a GC, but if this is the case, why GC thread 1 and GC thread 2 don't do foreground garbage collection at this window? why dedicated GC threads are not collecting when appication thread 1, 2, 3 are suspended?
Q2. What makes thread 1, 2, 3 suspended again? I feel likt it i the background thread 1, 2 doing generation 2 collection and suspends thread 1, 2, 3 to sweep heap objects, but why those background threads are still collecting after thread 1, 2, 3 are resumed (you can see that the red BGC Thread timestamp is longer than the blue suspended timestamp of thread 1, 2, 3)
Q2:
or BGCs there are 2 durations since each BGC will pause twice – one is the initial pause and the 2nd one is at the end of the mark phase (described in the GC event sequence section in mem-doc).