// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. namespace System { public readonly struct GCMemoryInfo { /// /// High memory load threshold when the last GC occured /// public long HighMemoryLoadThresholdBytes { get; } /// /// Memory load when the last GC ocurred /// public long MemoryLoadBytes { get; } /// /// Total available memory for the GC to use when the last GC ocurred. /// /// If the environment variable COMPlus_GCHeapHardLimit is set, /// or "Server.GC.HeapHardLimit" is in runtimeconfig.json, this will come from that. /// If the program is run in a container, this will be an implementation-defined fraction of the container's size. /// Else, this is the physical memory on the machine that was available for the GC to use when the last GC occurred. /// public long TotalAvailableMemoryBytes { get; } /// /// The total heap size when the last GC ocurred /// public long HeapSizeBytes { get; } /// /// The total fragmentation when the last GC ocurred /// /// Let's take the example below: /// | OBJ_A | OBJ_B | OBJ_C | OBJ_D | OBJ_E | /// /// Let's say OBJ_B, OBJ_C and and OBJ_E are garbage and get collected, but the heap does not get compacted, the resulting heap will look like the following: /// | OBJ_A | F | OBJ_D | /// /// The memory between OBJ_A and OBJ_D marked `F` is considered part of the FragmentedBytes, and will be used to allocate new objects. The memory after OBJ_D will not be /// considered part of the FragmentedBytes, and will also be used to allocate new objects /// public long FragmentedBytes { get; } internal GCMemoryInfo(long highMemoryLoadThresholdBytes, long memoryLoadBytes, long totalAvailableMemoryBytes, long heapSizeBytes, long fragmentedBytes) { HighMemoryLoadThresholdBytes = highMemoryLoadThresholdBytes; MemoryLoadBytes = memoryLoadBytes; TotalAvailableMemoryBytes = totalAvailableMemoryBytes; HeapSizeBytes = heapSizeBytes; FragmentedBytes = fragmentedBytes; } } }