I am considering extending java.util.Timer, and completely overriding all public methods, to use a different implementation. The one "problem" I see is, that Timer instantiate and starts a Thread in it's constructor, which I cannot use, due to it being "private". So I would like to not waste the "resources" used up by that Thread. I see at least one things I could do, which is to call super.cancel() directly in the sub-class constructor, thereby immediately closing the thread.
My question is: When are the "resources" of a java.lang.Thread allocated and released?
Allocation: At instance instantiation, or at call of start()? Release: At "end of run()" or at instance GC time?
If it's JVM implementation specific, I'd like to know how the Oracle JVM does it?
Generally, when you instantiate an object you allocate space in memory for it. This is the case when you create a Thread
object as well. It is making perfect sense, as you might wonder how can you use an object which is not stored in the memory. A Thread
object does not use a lot of memory though. On the other hand, when you call the start()
method the run()
method of the Runnable is called and all the resources associated to the Thread
will be allocated there. If the Thread
is no longer running, then all the otherwise unreferenced resources used by the Thread
will be de-allocated by the garbage collector
eventually. So, if you ask me I think your approach to stop the Thread
is good, this way only the Thread
object will remain in the memory along with any other resources you reference.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.