title: Why is finalize() only called once by garbage collector?
body: <p>Quotes from SCJP 6 study guide:</p>
  
  <blockquote>
    <p>In the <code>finalize()</code> method you could write code that passes a reference 
    to the object in question back to another object, effectively uneligiblizing the object for garbage collection. If at some point later on this same object becomes eligible for garbage collection again, the garbage collector can still process this object and delete it. The garbage collector, however, will remember that, for this object, <code>finalize()</code> already ran, and it will not run <code>finalize()</code> again</p>
  </blockquote>
  
  <p>Why is it designed so? The purpose of the <code>finalize()</code> method still holds good even when the object is marked of collection second time. Then why Java decides to skip call to <code>finalize()</code>?</p>