30.06.2013 Views

Under the Hood of .NET Memory Management - Simple Talk

Under the Hood of .NET Memory Management - Simple Talk

Under the Hood of .NET Memory Management - Simple Talk

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Chapter 2: The <strong>Simple</strong> Heap Model<br />

This was a simple and elegant approach that reduced <strong>the</strong> number <strong>of</strong> root references to be<br />

inspected and <strong>the</strong> number <strong>of</strong> object hierarchies to be navigated through. It also reduced<br />

<strong>the</strong> amount <strong>of</strong> heap compaction required.<br />

The only slight problem lies with how <strong>the</strong>y decided to name short-, medium- and longlived<br />

objects: Generation 0 (Gen 0), Generation 1 (Gen 1), and Generation 2 (Gen 2),<br />

respectively. Obviously, <strong>the</strong>y didn't consult <strong>the</strong> Marketing department first!<br />

For all that <strong>the</strong>y lack descriptive qualities, <strong>the</strong>se terms are widely known and understood,<br />

and I will (only slightly begrudgingly) use <strong>the</strong>m from now on, as I don't want to confuse<br />

you with my own personal preferences.<br />

Generational garbage collection<br />

You know <strong>the</strong> diagram I showed you in Figure 2.2? The one that was simple to grasp, and<br />

which you clearly understood? Well, let's now throw that away (I did warn you), because<br />

we now need to think <strong>of</strong> <strong>the</strong> SOH in terms <strong>of</strong> <strong>the</strong> three generations <strong>of</strong> objects: Gen 0,<br />

Gen 1, and Gen 2.<br />

When an object has just been created, it is classified as a Gen 0 object, which just<br />

means that it's new and hasn't yet been inspected by <strong>the</strong> GC. Gen 1 objects have been<br />

inspected by <strong>the</strong> GC once and survived, and Gen 2 objects have survived two or more<br />

such inspections (don't forget that <strong>the</strong> GC only lets an object survive if it ultimately has a<br />

root reference).<br />

So let's look at some allocated objects in <strong>the</strong>ir respective generations.<br />

In Figure 2.4, you can see each <strong>of</strong> <strong>the</strong> objects on <strong>the</strong> SOH and <strong>the</strong> generations <strong>the</strong>y belong<br />

to. Object W must have survived at least two GCs, whereas Z and Y have yet to be looked<br />

at for <strong>the</strong> first time. Object X has survived one GC inspection.<br />

44

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!