实例化一个线程并启动它之后,它创建的实例会发生什么。它会具有与其他实例相同的行为吗?
Thread a = new MyThread();
a.start();
a = null
创建的 Thread 实例所在的位置(在堆中或者不在永久空间中)。会被垃圾收集吗?如果它被垃圾收集,使用的实例属性发生了什么?
最佳答案
线程在“Activity ”状态时不会被垃圾回收,无论 Thread
对象是否可以访问。这是 JLS 对可达性定义的结果。
根据记录,典型的 JVM 在堆外部的内存中分配线程堆栈。 Thread
对象及其子对象是常规堆对象。这些可能被垃圾收集:据我所知,规范对此没有提及。最后,线程状态的一部分可能驻留在操作系统内核管理的内存中。
when I view the JVM through the JProfiler I was unable to find the instance of the MyThread which I create.
这并不能证明它已被垃圾收集。它只能证明 JProfiler 找不到它。
如果线程已终止(并且您没有保留对
Thread
对象的引用),那么它将不再可访问,并且 JProfile 将无法访问找到它。
关于java - 创建的线程实例是驻留在堆中还是其他地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6013271/