5 // Paolo Molaro (lupus@ximian.com)
7 // (C) 2001 Ximian, Inc. http://www.ximian.com
11 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 using System
.Runtime
.CompilerServices
;
34 using System
.Runtime
.ConstrainedExecution
;
38 public static class GC
41 public extern static int MaxGeneration
{
42 [MethodImplAttribute(MethodImplOptions
.InternalCall
)]
46 [MethodImplAttribute (MethodImplOptions
.InternalCall
)]
47 extern static void InternalCollect (int generation
);
49 public static void Collect () {
50 InternalCollect (MaxGeneration
);
53 public static void Collect (int generation
) {
55 throw new ArgumentOutOfRangeException ("generation");
56 InternalCollect (generation
);
59 [MonoDocumentationNote ("mode parameter ignored")]
60 public static void Collect (int generation
, GCCollectionMode mode
) {
64 [MethodImplAttribute (MethodImplOptions
.InternalCall
)]
65 public extern static int GetGeneration (object obj
);
67 public static int GetGeneration (WeakReference wo
) {
68 object obj
= wo
.Target
;
70 throw new ArgumentException ();
71 return GetGeneration (obj
);
74 [MethodImplAttribute (MethodImplOptions
.InternalCall
)]
75 public extern static long GetTotalMemory (bool forceFullCollection
);
77 /* this icall has weird semantics check the docs... */
78 [ReliabilityContract (Consistency
.WillNotCorruptState
, Cer
.Success
)]
79 [MethodImplAttribute (MethodImplOptions
.InternalCall
)]
80 public extern static void KeepAlive (object obj
);
82 [MethodImplAttribute (MethodImplOptions
.InternalCall
)]
83 public extern static void ReRegisterForFinalize (object obj
);
85 [ReliabilityContractAttribute (Consistency
.WillNotCorruptState
, Cer
.Success
)]
86 [MethodImplAttribute (MethodImplOptions
.InternalCall
)]
87 public extern static void SuppressFinalize (object obj
);
89 [MethodImplAttribute (MethodImplOptions
.InternalCall
)]
90 public extern static void WaitForPendingFinalizers ();
92 [ReliabilityContractAttribute (Consistency
.WillNotCorruptState
, Cer
.Success
)]
93 [MethodImplAttribute (MethodImplOptions
.InternalCall
)]
94 public extern static int CollectionCount (int generation
);
96 [MethodImplAttribute (MethodImplOptions
.InternalCall
)]
97 private extern static void RecordPressure (long bytesAllocated
);
99 public static void AddMemoryPressure (long bytesAllocated
) {
100 RecordPressure (bytesAllocated
);
103 public static void RemoveMemoryPressure (long bytesAllocated
) {
104 RecordPressure (-bytesAllocated
);