A thread will not be garbage collected while it is "live", irrespective of whether the Thread
object can be accessed. This is a consequence of the JLS's definition of reachability.
For the record, a typical JVM allocates a thread's stack in memory that is outside of the heap(s). The Thread
object and its children are regular heap objects. These may be garbage collected: the specifications are silent on this, AFAIK. Finally, part of a thread's state may reside in memory managed by the OS kernel.
when I view the JVM through the JProfiler I was unable to find the instance of the MyThread which I create.
That doesn't prove that it has been garbage collected. All it proves is that JProfiler couldn't find it.
If the thread has terminated (and you haven't kept a reference to the Thread
object) then it / they will no longer be reachable, and JProfile won't be able to find it.