Созданные экземпляры потоков находятся в куче или где-нибудь еще? - PullRequest
0 голосов
/ 16 мая 2011

После создания потока и запуска его, что произойдет с созданным экземпляром. Будет ли оно иметь то же поведение, что и другой экземпляр?

Thread a = new MyThread();
a.start();

a = null

, где находится этот созданный экземпляр Thread (в куче или в постоянном пространстве). это будет мусор? Если это сбор мусора, что случилось с используемыми свойствами экземпляра?

Ответы [ 2 ]

1 голос
/ 16 мая 2011

Поток не будет собираться мусором, пока он "живой", независимо от того, доступен ли объект Thread.Это является следствием определения достижимости JLS.

Для записи типичная JVM выделяет стек потока в памяти, находящейся вне кучи (ов).Объект Thread и его дочерние объекты являются обычными объектами кучи.Эти могут быть сборщиком мусора: спецификации об этом ничего не говорят, AFAIK.Наконец, часть состояния потока может находиться в памяти, управляемой ядром ОС.


при просмотре JVM через JProfiler я не смог найти экземпляр MyThread, который я создал.

  1. Это не доказывает, что это был мусор.Все это доказывает, что JProfiler не смог его найти.

  2. Если поток завершился (и вы не сохранили ссылку на объект Thread), тогда он / они будутбольше недоступен, и JProfile не сможет его найти.

0 голосов
/ 16 мая 2011

По определению, объект Thread доступен собственным потоком до тех пор, пока этот поток жив, поэтому ясно, что нет, объект Thread не будет GC, по крайней мере, до тех пор, пока запущенный поток не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...