.NET GC 的标记和清除阶段如何与应用程序线程同时运行?
最佳答案
我不确定。根据 Maoni Stephens blog .
During a concurrent GC we need to suspend managed threads twice to do some phases of the GC.
她没有详细说明这些阶段。
同样来自词条
Concurrent GC, on the other hand, runs concurrently with the managed threads to the following extend:
§ It allows you to allocate while a concurrent GC is in progress.
However you can only allocate so much – for small objects you can allocate at most up to end of the ephemeral segment. Remember if we don’t do an ephemeral GC, the total space occupied by ephemeral generations can be as big as a full segment allows so as soon as you reached the end of the segment you will need to wait for the concurrent GC to finish so managed threads that need to make small object allocations are suspended.
§ It still needs to stop managed threads a couple of times during a concurrent GC.
During a concurrent GC we need to suspend managed threads twice to do some phases of the GC. These phases could possibly take a while to finish. We only do concurrent GCs for full GCs. A full GC can be either a concurrent GC or a blocking GC. Ephemeral GCs (ie, gen0 or gen1 GCs) are always blocking. Concurrent GC is only available for workstation GC. In server GC we always do blocking GCs for any GCs.
您可能还对 this video 感兴趣.
关于.net - .NET GC 的标记和清理阶段如何与应用程序线程同时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4454291/