2 using System.Threading;
5 public class NonBridge {
6 public object a,b,c,d,e,f,g,h,i,j,k,l,m,n;
10 public object a,b,c,d,e,f,g,h,i,j,k,l,m,n;
16 static void LogLine (string message) {
17 Console.WriteLine ("[" + DateTime.Now + "] " + message);
19 //we fill 16Mb worth of stuff, eg, 256k objects
20 const int major_fill = 1024 * 256;
22 //4mb nursery with 64 bytes objects -> alloc half
23 const int nursery_obj_count = 16 * 1024;
25 static void CrashMainLoop () {
26 var arr = new object [major_fill];
27 for (int i = 0; i < major_fill; ++i)
28 arr [i] = new NonBridge ();
30 LogLine ("major fill done");
32 //induce massive fragmentation
33 for (int i = 0; i < major_fill; i += 4) {
39 LogLine ("fragmentation done");
41 //since 50% is garbage, do 2 fill passes
42 for (int j = 0; j < 2; ++j) {
43 for (int i = 0; i < major_fill; ++i) {
47 arr [i] = new Bridge ();
50 LogLine ("done spewing bridges");
52 for (int i = 0; i < major_fill; ++i)
60 for (int i = 0; i < loops; ++i) {
61 LogLine ("CrashLoop " + (i + 1) + "/" + loops);
66 GC.WaitForPendingFinalizers ();
68 GC.WaitForPendingFinalizers ();