title: C# language: Garbage Collection, SuppressFinalize
body: <p>I'm reading &quot;The C# Language&quot;, 4th Edition, it talks about garbage collection as below:</p>
  <blockquote>
  <p>&quot;BILL WAGNER: The following rule is an important difference between C# and other managed environments.</p>
  <p>Prior to an application’s termination, destructor's for all of its objects that have not yet been garbage collected are called, unless such cleanup has been suppressed (by a call to the library method GC.SuppressFinalize, for example).&quot;</p>
  </blockquote>
  <p>So I have a couple of questions here:</p>
  <ul>
  <li><p>Q1. Why .net is different from other managed environments (I suppose this is hinting Java?) here? Any particular design concern?</p>
  </li>
  <li><p>Q2. What will happened to objects that <code>GC.SuppressFinalize</code> is called?
  I understand that this means GC will not call such objects' finalizer (destructor), if so, when will these objects got really destroyed, so that the allocated memory bits are returned to the heap? Otherwise there'll be Memory Leak?</p>
  </li>
  </ul>