Java 创建的线程实例是驻留在堆中还是其他任何位置?
在实例化一个线程并启动它之后,所创建的线程实例将发生什么情况。它是否与其他实例具有相同的行为Java 创建的线程实例是驻留在堆中还是其他任何位置?,java,jvm,Java,Jvm,在实例化一个线程并启动它之后,所创建的线程实例将发生什么情况。它是否与其他实例具有相同的行为 Thread a = new MyThread(); a.start(); a = null 创建的线程实例所在的位置(在堆中或不在永久空间中)。它会被垃圾收集吗?。如果是“获取垃圾收集”,那么已使用的实例属性会发生什么情况?当线程处于“活动”状态时,将不会对其进行垃圾收集,而不管是否可以访问线程对象。这是JLS对可达性定义的结果 作为记录,典型的JVM在堆之外的内存中分配线程堆栈。线程对象及其子对
Thread a = new MyThread();
a.start();
a = null
创建的线程实例所在的位置(在堆中或不在永久空间中)。它会被垃圾收集吗?。如果是“获取垃圾收集”,那么已使用的实例属性会发生什么情况?当线程处于“活动”状态时,将不会对其进行垃圾收集,而不管是否可以访问
线程
对象。这是JLS对可达性定义的结果
作为记录,典型的JVM在堆之外的内存中分配线程堆栈。线程
对象及其子对象是常规堆对象。这些可能是垃圾收集的:恕我直言,规范对此没有任何规定。最后,线程状态的一部分可能位于操作系统内核管理的内存中
当我通过JProfiler查看JVM时,我无法找到我创建的MyThread的实例
线程
对象的引用),那么它/它们将不再可访问,并且JProfile将无法找到它根据定义,只要线程处于活动状态,线程对象就可以通过它自己的线程访问-因此,显然,不,至少在启动的线程处于活动状态之前,
Thread
对象不会被GC访问。。。。想想看。如果垃圾被收集起来会发生什么?这将是可怕的,没有一个像样的语言设计师会让这种情况发生。(用简单明了的方式说明它:在不再引用它之前,它不会被垃圾收集,直到线程结束才被引用)在这种情况下,“创建的实例”和“其他实例”是什么意思?当我通过JProfiler查看JVM时,我无法找到我创建的MyThread的实例