228 человек проголосовали за этот ответ
Заинтересовано, скрыто!
В компании JVM много потоков, и много фракций, особенно люди из механизма выполнения, потому что они являются основным отделом, они часто диссят от других отделов.
428 человек проголосовали за этот ответ
Незваный.
На самом деле работать в JVM не так сложно, как вы думаете, а другие отделы непонятны.В качестве примера возьмем мой отдел сборки мусора (это название не очень удачное, назовем его отделом GC).
Моя работа заключается в выполнении объектовfinalize
Метод, как вы знаете, сейчас программисты редко реализуют этот метод класса, поэтому большая часть моей работы может оказаться подозрительной.
---------------Разделительная линия---------------
Кто-то спросил меня в комментарияхfinalize
Как выполняется метод, вот единый ответ.
JVMClassLoader
Когда отдел загружает класс, он проверяет, есть ли у него реализацияfinalize
метод, я не знаю конкретных деталей, пожалуйста@AppClassLoaderСтуденты, чтобы помочь ответить.
Если обнаружено, чтоfinalize
метод, все объекты этого класса, создаваемые в будущем, будут создаваться сFinalizer
объект.
этоFinalizer
Есть два ключевых момента:
- Унаследованный от класса Reference, он также является ссылкой, а ссылкой является объект, созданный с его помощью.
- Существует элемент с именем queue, который указывает на очередь:
ReferenceQueue
, точноFinalizer
статическая переменная-член .
Помимо,Finalizer
Внутри также есть статический потокFinalizerThread
, это на самом деле я. Моя работа состоит в том, чтобы продолжать вынимать из вышеуказанной очередиFinalizer
объект, а затем выполняет его ссылочный объектfinalize
метод.
Какой? ты спрашиваешь меняFinalizer
Когда объект попал в эту очередь? Я не знаю об этом, это выходит за рамки моей работы, не могли бы вы@ReferenceHandlerПомогите ответить.
над.
522 человека проголосовали за этот ответ
Спасибо!
Компания JVM в целом неплохая, по всем параметрам условия неплохие. Офисное здание имеет два этажа.Первый этаж - родной этаж, а ниже работает куча ниток сотрудников с родного этажа. Я нахожусь на уровне Java на втором этаже, и этот слой состоит из всех потоков Java.
Я работаю в отделе загрузки классов JVM, и мой руководительExtClassLoader
, его Лидер - руководитель компанииBootstrapClassLoader
.
Задача нашего отдела — загрузить файлы .class с диска в память и превратить их в пригодные для использования классы. Работа довольно легкая. Но одна вещь, которая меня раздражает, это отдел双亲委派
система.
Каждый раз, когда вы сталкиваетесь с новым классом, который необходимо загрузить, согласно регламенту, вы должны попросить лидера загрузить его, а лидер просит своего лидера загрузить его. Но руководителиBootstrapClassLoader
Он отвечает только за загрузку основных классов Java, а мой руководитель отвечает только за загрузку некоторых классов расширений, поэтому в большинстве случаев после запроса инструкций они не могут его загрузить, и мне приходится позволять загружать его мне.
Раз-два тратить много времени на процесс, зря потраченное время. Я много раз отвечал на этот вопрос, не могли бы вы попросить меня загрузить его напрямую, но он каждый раз отклонялся, говоря, что из соображений безопасности они должны его посмотреть. Увы, лидерам тоже трудно отказаться от делегирования власти!
------------Разделительная линия------------
Раздел комментариев слишком враждебен! Сказать, что я не понимаю безопасности, тоже пьян.
отвечать@FinalizerThreadвопросы учащихся.
Ведь, как он сказал, наш ClassLoader проверит, реализован ли классfinalize
метод, результат проверки будет сохранен вKlassв структуреAccessFlags
внутри.
Это важное поле, которое записывает многие свойства класса:
С помощью этой информации при создании объекта можно проверить флаг, чтобы решить, следует ли создаватьFinalizer
объект.
над.
145 человек проголосовали за этот ответ
благодарный@FinalizerThreadпригласили одноклассники.
Люди в JVM, только что с ночной смены.
Время уходит, всего несколько слов.
Как этот одноклассник, я также сотрудник отдела GC. Лечение компании действительно хорошо, и этот аспект все еще очень конкурентоспособным.
Что касается моей работы, то она тесно связана со сборкой мусора!
Вы также знаете, что в Java, в дополнение к основным сильным ссылкам, есть четыре специальных вида ссылок:
- FinalReference
- Мягкая ссылка
- Слабая ссылка (WeakReference)
- PhantomReference
Finalizer, упомянутый одноклассниками FinalizerThread, на самом деле является подклассом FinalReference.
Моя работа состоит в том, чтобы добавлять эти специальные ссылки в соответствующие очереди одну за другой во время сборки мусора.
Возьмите объект Finalizer, упомянутый студентами FinalizerThread выше, я добавлю его в очередь, на которую он указывает, а затем студенты FinalizerThread возьмут его из очереди для обработки.
898 человек проголосовали за этот ответ
Позвольте мне просто ответить на этот вопрос.
Прочитав ответы предыдущих, действительно засуха убивает засуху, а наводнение убивает наводнение. Я так занят каждый день, что не могу дышать, у вас еще есть время на рыбалку!
Я самый ранний из тех, кто приходит каждый день в компанию JVM, следитеThreads::create_vm
Встал.
Как и у двух наверху, у меня также есть рабочая очередь с именем _vm_thread, тип которойVMOperationQueue
.
Отличие от двух наверху в том, что они работают на яве на втором этаже, а я работаю на родном этаже на первом.
Рабочий ритм действительно сильно отличается в разных отделах. Я единственный в отделе, в котором нахожусь. Это одноэлементный поток. Что мне нужно делать, так это постоянно вынимать операции из очереди работ для выполнения.
Очереди упакованы одна за другой вVM_Operation
Это их базовый класс. Конкретно операций десятки. Перечислите некоторые из них. Не стесняйтесь их щупать:
Больше ничего не скажу, просто возьмем в качестве примера самую знакомую сборку мусора, без меня память области кучи JVM давно бы свалилась в горы мусора.
Время отношения, напишите здесь сначала.
---------------Разделительная линия---------------
Проснулась с таким количеством лайков, всем спасибо!
Добавьте еще несколько слов.
VM_Operation
В нем также установлен режим, указывающий, должна ли операция войти в безопасную точку (такую как сборка мусора) и должна ли она быть заблокирована для выполнения.
Вход и выход из точки безопасности инициируются мной, а выполнениеSafepointSynchronize
изbegin()函数
а такжеend()
функция.
над.
Эта статья кратко знакомит с работой нескольких встроенных потоков в JVM в стиле Zhihu, надеясь помочь вам изучить JVM.
Если вам понравилась эта статья, пожалуйста, помогите переслать и поделиться, спасибо!
Прошлые ТОП5 статей
Как жалко! Даже основные языки программирования расставили прилавки!
Я чуть не потерял работу из-за запроса о перекрестном происхождении
Сделанный! Процессор слепо требует, чтобы что-то произошло в ближайшее время!
Какая хеш-таблица сильнее? Несколько основных языков программирования спорят!
Фантастическое путешествие HTTP-пакета