Re: finalize called on an object that's still in scope?
Tom Hawtin wrote:
Piotr Kobzda wrote:
while (true) {
try {
Thread.sleep(5000);
} catch (InterruptedException ie) {
if (ie.equals(lineup)) {
throw new AssertionError();
}
}
}
Do you think Tom, it is possible to optimize the above fragment in the
way that a lineup local is removed form a locals stack (i.e. becomes
unreachable) before a loop ends?
I'm not sure. Are you?
No, I'm not. Albeit that's difficult to predict all conditions for
InterruptExeption occurrence here, that's not impossible, I think.
A clever optimizer may know, that there is no other thread allowed to
interrupt our thread; or even ensure that there is well known subset of
InterruptExeptions a sleep() my throw (and optimizer knows, that none of
them equals to lineup), or check something else... So it seams that
there is some chance for optimizing it...
However, without ensuring that, lineup must stay reachable (for possible
use in the exception handler).
The problem is, that all the above optimizations must know the code
execution environment, so I'm not sure, if that's allowed to treat them
as the transformations of a program which are really allowed to impact
reachability of objects? Are they?
Certainly I can't see the required happens-before relationship.
Well, I can't see that either. The reason, I guess, is different: I've
never really checked happens-before relationships of any code,
everything before me. :)
First, it seams to me, I have to define all the /reachability decision
points/ in my code... ;)
piotr