56 lines
1.9 KiB
C#
56 lines
1.9 KiB
C#
namespace System.GCs {
|
|
|
|
using Microsoft.Bartok.Runtime;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Threading;
|
|
|
|
// this class contains all of the things from the generational GC that
|
|
// is accessed by the greater runtime in a non-virtual fashion. putting
|
|
// it here is necessary to allow devirtualization of critical
|
|
// non-generational GC methods.
|
|
[NoCCtor]
|
|
internal class GenerationalGCData
|
|
{
|
|
|
|
[TrustedNonNull]
|
|
internal static RememberedSet installedRemSet;
|
|
|
|
// PageType.Owner0 is not 0 now. One side effect is that the following arrays
|
|
// have unused entries.
|
|
|
|
internal static short[] gcCountTable;
|
|
|
|
internal static short[] gcFrequencyTable;
|
|
|
|
internal static UIntPtr[] gcPromotedTable;
|
|
internal static UIntPtr[] gcPromotedLimitTable;
|
|
|
|
internal static int[] fromSpacePageCounts;
|
|
|
|
internal static UIntPtr nurserySize;
|
|
internal static UIntPtr pretenuredSinceLastFullGC;
|
|
internal const PageType nurseryGeneration = PageType.Owner0;
|
|
internal const PageType largeObjectGeneration = PageType.Owner1;
|
|
internal static PageType defaultGeneration;
|
|
|
|
internal static PageType MIN_GENERATION {
|
|
get { return PageType.Owner0; }
|
|
}
|
|
internal static PageType MAX_GENERATION {
|
|
get { return PageType.Owner1; }
|
|
}
|
|
|
|
// These two arrays contain the range of pages each generation is within
|
|
internal static UIntPtr[] MinGenPage;
|
|
internal static UIntPtr[] MaxGenPage;
|
|
|
|
[Inline]
|
|
internal static bool IsLargeObjectSize(UIntPtr size) {
|
|
UIntPtr largeObjectSize =
|
|
(UIntPtr) (1 << Constants.LargeObjectBits);
|
|
return size >= largeObjectSize;
|
|
}
|
|
|
|
}
|
|
}
|