<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content=text/html;charset=windows-1252 http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.19222"></HEAD>
<BODY bgColor=#ffffff text=#000000>
<DIV><SPAN class=647165208-15052012><FONT color=#0000ff size=2 face=Arial>Yes 
that is what I said: as long the Object constructor completes (not "as long as 
the object's constructor completes") ;-)</FONT></SPAN></DIV>
<DIV><SPAN class=647165208-15052012><FONT color=#0000ff size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=647165208-15052012><FONT color=#0000ff size=2 
face=Arial>Technically the subclass constructor has already been called, it just 
makes a call to the super() constructor first, then continues with its own 
execution. So any exception thrown before we invoke Object() means the object is 
not finalizable. Object() can't throw anything (in the JDK) and once it 
completes the object is finalizable regardless of whether any subclass 
constructor completes abruptly by throwing an exception.</FONT></SPAN></DIV>
<DIV><SPAN class=647165208-15052012><FONT color=#0000ff size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=647165208-15052012><FONT color=#0000ff size=2 
face=Arial>David</FONT></SPAN></DIV>
<BLOCKQUOTE 
style="BORDER-LEFT: #0000ff 2px solid; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; MARGIN-RIGHT: 0px" 
dir=ltr>
  <DIV dir=ltr class=OutlookMessageHeader align=left><FONT size=2 
  face=Tahoma>-----Original Message-----<BR><B>From:</B> Dr Heinz M. Kabutz 
  [mailto:heinz@javaspecialists.eu]<BR><B>Sent:</B> Tuesday, 15 May 2012 6:41 
  PM<BR><B>To:</B> dholmes@ieee.org<BR><B>Cc:</B> Vitaly Davidovich; 
  concurrency-interest@cs.oswego.edu<BR><B>Subject:</B> Re: 
  [concurrency-interest] Object finalization<BR><BR></FONT></DIV>Exactly.  
  The question is - can the constructor ever *not* complete in Java, if we say 
  that an exception is also a "completion"?  I suppose it could get stuck 
  in a deadlock during construction.<BR><BR>I would argue that the object would 
  get finalized even if the object could not get constructed.  AFAIK, the 
  object would get registered for finalization when the superclass Object is 
  constructed, that is, before the subclass' constructor is 
  called.<BR><BR>Here's my proof:<BR><BR>import 
  java.util.concurrent.locks.*;<BR><BR>public class RegisterForFinalize 
  {<BR>  public static void main(String[] args) {<BR>    
  final Lock lock = new ReentrantLock();<BR>    
  lock.lock();<BR>    new Thread() 
  {<BR>      
  {<BR>        
  setDaemon(true);<BR>      
  }<BR>      public void run() 
  {<BR>        new Object() 
  {<BR>          
  {<BR>            
  lock.lock(); // <-- will never 
  return<BR>          
  }<BR>          protected void 
  finalize() throws Throwable 
  {<BR>            
  System.out.println("Object 
  finalized");<BR>          
  }<BR>        
  };<BR>      }<BR>    
  }.start();<BR>    System.runFinalizersOnExit(true);<BR>  
  }<BR>}<BR><BR>Prints out: Object finalized.  And the constructor will 
  never complete.<BR><BR>So the essential part is that Object's constructor 
  completes, which it will probably always do.<BR><BR>Tricky.  Bottom line 
  - DO NOT USE FINALIZERS :-)<BR><PRE class=moz-signature cols="72">Regards

Heinz
-- 
Dr Heinz M. Kabutz (PhD CompSci)
Author of "The Java(tm) Specialists' Newsletter"
Sun Java Champion
IEEE Certified Software Development Professional
<A class=moz-txt-link-freetext href="http://www.javaspecialists.eu">http://www.javaspecialists.eu</A>
Tel: +30 69 75 595 262
Skype: kabutz 
</PRE><BR><BR>On 5/15/12 11:08 AM, David Holmes wrote: 
  <BLOCKQUOTE cite=mid:NFBBKALFDCPFIDBNKAPCEEILJEAA.davidcholmes@aapt.net.au 
  type="cite">
    <META name=GENERATOR content="MSHTML 8.00.6001.19222">
    <DIV><SPAN class=913050808-15052012><FONT color=#0000ff size=2 face=Arial>As 
    long as the Object constructor completes the object will be registered for 
    finalization.</FONT></SPAN></DIV>
    <DIV><SPAN class=913050808-15052012><FONT color=#0000ff size=2 
    face=Arial></FONT></SPAN> </DIV>
    <DIV><SPAN class=913050808-15052012><FONT color=#0000ff size=2 
    face=Arial>David</FONT></SPAN></DIV>
    <BLOCKQUOTE 
    style="BORDER-LEFT: rgb(0,0,255) 2px solid; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; MARGIN-RIGHT: 0px" 
    dir=ltr>
      <DIV dir=ltr class=OutlookMessageHeader align=left><FONT size=2 
      face=Tahoma>-----Original Message-----<BR><B>From:</B> Dr Heinz M. Kabutz 
      [<A class=moz-txt-link-freetext 
      href="mailto:heinz@javaspecialists.eu">mailto:heinz@javaspecialists.eu</A>]<BR><B>Sent:</B> 
      Tuesday, 15 May 2012 6:06 PM<BR><B>To:</B> Vitaly Davidovich<BR><B>Cc:</B> 
      Boehm, Hans; <A class=moz-txt-link-abbreviated 
      href="mailto:concurrency-interest@cs.oswego.edu">concurrency-interest@cs.oswego.edu</A>; 
      <A class=moz-txt-link-abbreviated 
      href="mailto:dholmes@ieee.org">dholmes@ieee.org</A><BR><B>Subject:</B> Re: 
      [concurrency-interest] Object finalization<BR><BR></FONT></DIV>The 
      finalizer definitely runs even if the constructor fails (in other words, 
      throws an exception).  It's the trick we use to solve the Chicken and 
      Egg puzzle in Wouter Coekaert's blog:<BR><BR><A 
      class=moz-txt-link-freetext 
      href="http://wouter.coekaerts.be/2012/puzzle-chicken" 
      moz-do-not-send="true">http://wouter.coekaerts.be/2012/puzzle-chicken</A><BR><PRE class=moz-signature cols="72">Regards

Heinz
-- 
Dr Heinz M. Kabutz (PhD CompSci)
Author of "The Java(tm) Specialists' Newsletter"
Sun Java Champion
IEEE Certified Software Development Professional
<A class=moz-txt-link-freetext href="http://www.javaspecialists.eu" moz-do-not-send="true">http://www.javaspecialists.eu</A>
Tel: +30 69 75 595 262
Skype: kabutz 
    </PRE><BR><BR>On 5/15/12 1:05 AM, Vitaly Davidovich wrote: 
      <BLOCKQUOTE 
      cite=mid:CAHjP37G6TmnDqQ_TdQ0FX6_T-52ye-jj6dTAvyKV12up_=eWow@mail.gmail.com 
      type="cite">
        <P>Raymond Chen (MSFT) has an interesting series of posts on 
        finalization, including this one which demonstrates your example Hans: 
        <A 
        href="http://blogs.msdn.com/b/oldnewthing/archive/2010/08/13/10049634.aspx" 
        moz-do-not-send="true">http://blogs.msdn.com/b/oldnewthing/archive/2010/08/13/10049634.aspx</A></P>
        <P>CLR team even added GC.KeepAlive() to try and alleviate some causes 
        of this race.  Then there's a whole slew of bugs that can happen 
        due to memory write ordering/visibility since finalizer thread is 
        subject to same issues as normal threads.  Then in CLR finalizer 
        can run even if constructor fails (I believe JVM does not?), possibly 
        causing broken state/invariants to be observed.  Finalizers are one 
        of those well intentioned ideas that goes haywire ... :)</P>
        <P>Sent from my phone</P>
        <DIV class=gmail_quote>On May 14, 2012 4:58 PM, "Boehm, Hans" <<A 
        href="mailto:hans.boehm@hp.com" 
        moz-do-not-send="true">hans.boehm@hp.com</A>> wrote:<BR 
        type="attribution">
        <BLOCKQUOTE 
        style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0pt 0pt 0pt 0.8ex; PADDING-LEFT: 1ex" 
        class=gmail_quote>
          <DIV lang=EN-US link="blue" vlink="purple">
          <DIV>
          <P class=MsoNormal><SPAN 
          style="FONT-FAMILY: 'Calibri','sans-serif'; COLOR: rgb(31,73,125); FONT-SIZE: 11pt">But 
          things are considerably worse than that.  References only solve 
          the easy problem.  The most serious problem in my mind is that 
          finalizers can run, and references can be enqueued, while e.g. a 
          method of the object being finalized is still running.  The fact 
          that the method is still running does not ensure that the object 
          itself is still reachable; the method may only need fields that have 
          already been cached in registers to complete.  This affects 
          finalizers and java.lang.ref equally, and explains why probably the 
          large majority of code using either one is broken.</SPAN></P>
          <P class=MsoNormal><SPAN 
          style="FONT-FAMILY: 'Calibri','sans-serif'; COLOR: rgb(31,73,125); FONT-SIZE: 11pt"></SPAN> </P>
          <P class=MsoNormal><SPAN 
          style="FONT-FAMILY: 'Calibri','sans-serif'; COLOR: rgb(31,73,125); FONT-SIZE: 11pt">I 
          gave a JavaOne talk about this many years ago (slides at <A 
          href="http://www.hpl.hp.com/personal/Hans_Boehm/misc_slides/java_finalizers.pdf" 
          target=_blank 
          moz-do-not-send="true">http://www.hpl.hp.com/personal/Hans_Boehm/misc_slides/java_finalizers.pdf</A>).  
          It is possible, though really ugly and slow to work around the 
          problem.  I donít believe anyone does.  I was told just 
          after I gave the talk that this explained a problem somebody had been 
          trying to track down, so I suspect this actually happens occasionally 
          in the wild, though probably not on x86-32.</SPAN></P>
          <P class=MsoNormal><SPAN 
          style="FONT-FAMILY: 'Calibri','sans-serif'; COLOR: rgb(31,73,125); FONT-SIZE: 11pt"></SPAN> </P>
          <P class=MsoNormal><SPAN 
          style="FONT-FAMILY: 'Calibri','sans-serif'; COLOR: rgb(31,73,125); FONT-SIZE: 11pt">Hans</SPAN></P>
          <P class=MsoNormal><SPAN 
          style="FONT-FAMILY: 'Calibri','sans-serif'; COLOR: rgb(31,73,125); FONT-SIZE: 11pt"></SPAN> </P>
          <DIV 
          style="BORDER-BOTTOM: medium none; BORDER-LEFT: 1.5pt solid; PADDING-BOTTOM: 0in; PADDING-LEFT: 4pt; PADDING-RIGHT: 0in; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0in">
          <DIV>
          <DIV 
          style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP: rgb(181,196,223) 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt">
          <P class=MsoNormal><B><SPAN 
          style="FONT-FAMILY: 'Tahoma','sans-serif'; FONT-SIZE: 10pt">From:</SPAN></B><SPAN 
          style="FONT-FAMILY: 'Tahoma','sans-serif'; FONT-SIZE: 10pt"> <A 
          href="mailto:concurrency-interest-bounces@cs.oswego.edu" target=_blank 
          moz-do-not-send="true">concurrency-interest-bounces@cs.oswego.edu</A> 
          [mailto:<A href="mailto:concurrency-interest-bounces@cs.oswego.edu" 
          target=_blank 
          moz-do-not-send="true">concurrency-interest-bounces@cs.oswego.edu</A>] 
          <B>On Behalf Of </B>Bob Lee<BR><B>Sent:</B> Monday, May 14, 2012 11:01 
          AM<BR><B>To:</B> <A href="mailto:dholmes@ieee.org" target=_blank 
          moz-do-not-send="true">dholmes@ieee.org</A><BR><B>Cc:</B> <A 
          href="mailto:concurrency-interest@cs.oswego.edu" target=_blank 
          moz-do-not-send="true">concurrency-interest@cs.oswego.edu</A><BR><B>Subject:</B> 
          Re: [concurrency-interest] Object finalization</SPAN></P></DIV></DIV>
          <P class=MsoNormal> </P>
          <P class=MsoNormal>On Sun, May 13, 2012 at 11:22 PM, David Holmes 
          <<A href="mailto:davidcholmes@aapt.net.au" target=_blank 
          moz-do-not-send="true">davidcholmes@aapt.net.au</A>> wrote:</P>
          <DIV>
          <BLOCKQUOTE 
          style="BORDER-BOTTOM: medium none; BORDER-LEFT: 1pt solid; PADDING-BOTTOM: 0in; PADDING-LEFT: 6pt; PADDING-RIGHT: 0in; MARGIN-LEFT: 4.8pt; BORDER-TOP: medium none; MARGIN-RIGHT: 0in; BORDER-RIGHT: medium none; PADDING-TOP: 0in">
            <DIV>
            <DIV>
            <P class=MsoNormal><SPAN 
            style="FONT-FAMILY: 'Arial','sans-serif'; COLOR: blue">I should add 
            the Vitaly's comments prompted me to remember that 'a' and 'b' might 
            refer to objects that themselves have been finalized prior to the 
            current finalizer running. This just reinforces how tricky 
            finalization is.</SPAN></P></DIV></DIV></BLOCKQUOTE>
          <DIV>
          <P class=MsoNormal> </P></DIV>
          <DIV>
          <P class=MsoNormal>Indeed, the finalizers can run in any order, 
          independent of the structure of the object graph.</P></DIV>
          <DIV>
          <P class=MsoNormal> </P></DIV>
          <DIV>
          <P class=MsoNormal>For those who are interested in learning more, I 
          cover that and half a dozen other reasons not to use finalizers in 
          this talk: <A href="http://www.parleys.com/#id=2657&st=5" 
          target=_blank 
          moz-do-not-send="true">http://www.parleys.com/#id=2657&st=5</A></P></DIV>
          <DIV>
          <P class=MsoNormal> </P></DIV>
          <DIV>
          <P class=MsoNormal>Thanks,</P></DIV>
          <DIV>
          <P class=MsoNormal>Bob </P></DIV>
          <DIV>
          <P class=MsoNormal><A href="https://squareup.com/jobs" target=_blank 
          moz-do-not-send="true">Square is hiring!</A></P></DIV>
          <DIV>
          <P 
          class=MsoNormal> </P></DIV></DIV></DIV></DIV></DIV><BR>_______________________________________________<BR>Concurrency-interest 
          mailing list<BR><A href="mailto:Concurrency-interest@cs.oswego.edu" 
          moz-do-not-send="true">Concurrency-interest@cs.oswego.edu</A><BR><A 
          href="http://cs.oswego.edu/mailman/listinfo/concurrency-interest" 
          target=_blank 
          moz-do-not-send="true">http://cs.oswego.edu/mailman/listinfo/concurrency-interest</A><BR><BR></BLOCKQUOTE></DIV><PRE wrap=""><HR SIZE=4 width="90%">
_______________________________________________
Concurrency-interest mailing list
<A class=moz-txt-link-abbreviated href="mailto:Concurrency-interest@cs.oswego.edu" moz-do-not-send="true">Concurrency-interest@cs.oswego.edu</A>
<A class=moz-txt-link-freetext href="http://cs.oswego.edu/mailman/listinfo/concurrency-interest" moz-do-not-send="true">http://cs.oswego.edu/mailman/listinfo/concurrency-interest</A>
  </PRE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BODY></HTML>