Объект зависит от корневого объекта gc, такого как поле потока , что такое gc этого объекта? - PullRequest
0 голосов
/ 11 марта 2019

ссылается на рабочий класс ThreadPoolExecutor

      private final class Worker
        extends AbstractQueuedSynchronizer
        implements Runnable
    {

        final Thread thread;

        Runnable firstTask;

        volatile long completedTasks;


        Worker(Runnable firstTask) {
            setState(-1); // inhibit interrupts until runWorker
            this.firstTask = firstTask;
            this.thread = getThreadFactory().newThread(this);
        }

        /** Delegates main run loop to outer runWorker  */
        public void run() {
            runWorker(this);
        }
    }

это некоторый сегмент кода в классе ThreadPoolExecutor

    private boolean addWorker(Runnable firstTask, boolean core) {
        boolean workerStarted = false;
        boolean workerAdded = false;
        Worker w = null;
        try {
            w = new Worker(firstTask);
            final Thread t = w.thread;
            ...
        }
    }

Я узнал через Google, что Thread - это корень gc. Работник зависит от объекта потока, а поток также зависит от работника. Когда поток работает, если рабочий будет переработан, я знаю, помечен, только если объект недоступен относительно gc root, как работник определяет, что рабочий должен быть помечен для повторного использования. В противном случае рабочий не будет переработан во время работы потока?

1 Ответ

1 голос
/ 11 марта 2019

За время существования JVM существует только один сборщик мусора.

Подумайте над прочтением Основы сборки мусора Java , чтобы получить больше информации о GC.

UPDATE:

Вы пишете:
«Рабочий зависит от объекта потока, а поток также зависит от рабочего».

Так как же GC может удалить любой из них, если вы можете связаться с ними в любой момент (что означает, что объекты все еще могут использоваться)?

Объекты останутся в памяти до они станут недоступными.

Так что в вашем случае Thread и Worker будут собирать мусор только тогда, когда они оба станут недоступны из корня.

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