If it ever happens that an object with a non-trivial finalizer is optimized away, that would be a serious JDK bug, so I would remove the constructor code for MyObject (what are you protecting against?). See my sample code in previous msg.
WeakReference<?> ref = new WeakReference<Object>(new Object() {
protected void finalize() { finalizeDone.countDown(); }});
43 public MyObject() {
44 /* Make sure object allocation/deallocation is not
optimized out */
45 wasInitialized = true;
46 }
