Re: garbage collection anonymous objects?
Mark Space wrote:
Here's a weird thought. If I create an anonymous object then put that
object to some use, could it still be garbage collected? In particular,
given the following code, I don't see what guarantees that the thread
created won't be garbage collected.
public class ServerTest implements Runnable
{
public static void main(String[] args)
{
new Thread( new ServerTest() ).start();
}
public void run()
{
while( true )
{ //....
}
}
}
I didn't run this so sorry for any missed errors, but you get the idea.
Shouldn't the JVM garbage collect the thread at some point? This code
seems like trouble waiting to happen, but I'm sure I've seen this exact
idiom elsewhere.
The key definition is "A reachable object is any object that can be
accessed in any potential continuing computation from any live thread.".
http://java.sun.com/docs/books/jls/third_edition/html/execution.html#12.6
If an object is reachable, it cannot be garbage collected. The
definition does not limit reachability to objects that are referenced by
named variables.
The static method Thread.currentThread() returns the Thread object for
the calling thread. If there is either any possibility of the thread
calling it, or if the thread in any way needs its Thread object in order
to go on running, then the Thread object is reachable for the life of
the thread, regardless of whether there are any other references to it.
Patricia