Каково это работать в виртуальной машине Java?

Java

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-пакета