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 ();