singrdk/base/Imported/Bartok/runtime/shared/GCs/AdaptiveCopyingCollector.cs

69 lines
2.5 KiB
C#
Raw Normal View History

2008-11-17 18:29:00 -05:00
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
/*******************************************************************/
/* WARNING */
/* This file should be identical in the Bartok and Singularity */
/* depots. Master copy resides in Bartok Depot. Changes should be */
/* made to Bartok Depot and propagated to Singularity Depot. */
/*******************************************************************/
namespace System.GCs {
using System.Collections;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Threading;
#if SINGULARITY
using Microsoft.Singularity;
#endif
[NoCCtor]
internal class AdaptiveCopyingCollector: GenerationalCollector
{
internal static AdaptiveCopyingCollector instance;
private AdaptiveCopyingCollector() {
}
public static new void Initialize() {
GenerationalCollector.Initialize();
SemispaceCollector.Initialize();
SlidingCollector.Initialize();
// instance = new AdaptiveCopyingCollector();
instance = (AdaptiveCopyingCollector )
BootstrapMemory.Allocate(typeof(AdaptiveCopyingCollector));
}
internal override void TruncateOlderAllocationAreas(int generation) {
SemispaceCollector.instance.TruncateOlderAllocationAreas(generation);
SlidingCollector.instance.TruncateOlderAllocationAreas(generation);
}
internal override void CollectGeneration(int generation,
UIntPtr generationPageCount)
{
UIntPtr availableMemory = (UIntPtr)
(MemoryManager.MemorySize - MemoryManager.OperatingSystemSize);
UIntPtr softPageCountLimit = PageTable.PageCount(availableMemory);
if (generation == (int)MAX_GENERATION &&
(generationPageCount << 1) > softPageCountLimit) {
// Use sliding collector when fromSpace > 1/2 available memory
SlidingCollector.instance.CollectGeneration(generation, generationPageCount);
} else {
SemispaceCollector.instance.CollectGeneration(generation, generationPageCount);
}
}
internal override void EnableHeap() {
SlidingCollector.instance.EnableHeap();
SemispaceCollector.instance.EnableHeap();
}
}
}