[Серия JVM System Learning Road] Обзор JVM

Java

Адрес демо-кода серии обучающих дорог системы JVM:GitHub.com/Mt Плотник…

предисловие

Всем привет, меня зовут Сяочунь, я прочитал более 10 глав по параллельному программированию.JUCСоответствующие знания отсортированы, еслиJUCСтуденты, которые еще не владеют знаниями, обратите внимание на мой паблик аккаунт [山间木匠] К нему можно получить прямой доступ из нижней части меню.Из этой статьи обновите точки знаний, связанные с JVM.Каждый разработчик JAVA должен быть в состоянии глубоко понять, что многопоточность, параллелизм и JVM - это сложные и болезненные вопросы.

домашнее исследованиеJVMУ людей, занимающихся виртуальными машинами, почти есть одна книга «Углубленное понимание виртуальной машины Java» Чжоу Чжимина. я первый раз смотрю《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》После прочтения я забыл, и я до сих пор в недоумении от большей части знаний. Позже я нашел хорошее видео на станции B, обучающей платформе, которую любят молодые люди.尚硅谷2020最新版宋红康JVM教程, также обновлено более 300 эпизодов, для новичковJVMОчень полезно.【JVM系统学习之路】будет основываться на尚硅谷2020最新版宋红康JVM教程Блог по написанию глав.

Рекомендуемые книги и видеоВидео: Последняя версия туториала Song Hongkang JVM в Shang Silicon Valley в 2020 году. Адрес станции B:уууууууу. Масштаб пропорций.com/video/BV1PJ…книги:《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》 《垃圾回收的算法与实现》 《Java虚拟机规范(Java SE 8版)》

Зачем обучению нужна JVM

Работающая онлайн-система внезапно зависла, доступ к системе невозможен или даже OOM!

  • Я хочу решить проблему онлайн JVM GC, но не могу запустить
  • Запустился новый проект, и я терялся в настройках различных параметров JVM.
  • Перед каждым собеседованием вы должны процитировать некоторые концептуальные концепции JVM, но интервьюер часто спрашивает вас, как настроить параметры VM в реальном проекте, как решить GC, OOM и другие проблемы, и вы в замешательстве.
  • Основные навыки для программистов среднего и продвинутого уровня
    • Требования к управлению проектом и настройке
  • Преследовать дух выродка
    • Например: алгоритм сборки мусора, JIT (компилятор точно в срок), лежащие в его основе принципы.

Как калькуляторы распознают языки высокого уровня  image.png

О чем думают архитекторы каждый день?

  • Как мне сделать мою систему быстрее?
  • Как избежать узких мест в системе?
  • Участие в оптимизации производительности и реконструкции существующих систем для обеспечения производительности и стабильности платформы.
  • В соответствии с бизнес-сценариями и потребностями определить техническое направление и сделать технический отбор
  • Способность независимо проектировать и проектировать распределенные решения с высокой степенью параллелизма на больших объемах данных для удовлетворения функциональных и нефункциональных требований.
  • Устранение различных потенциальных системных рисков, архитектуры и написания кода основных функций
  • Анализ узких мест системы, решение различных неизлечимых заболеваний, настройка производительности и т. д.

Экосистема JVM

JavaЭто одна из наиболее широко используемых платформ для разработки программного обеспечения. вместе сJava так же какJavaрастущее сообществоJava Это уже не просто компьютерный язык, это платформа, культура и сообщество.

  • как платформа,JavaВиртуальные машины играют ключевую роль
    • Groovy,Scala,JRuby,Kotlinподождите всеJavaчасть платформы
  • JavaЭто почти стало синонимом «открытого исходного кода».
    • Стороннее программное обеспечение и фреймворки с открытым исходным кодом. подобноTomcat,Struts,MyBatis ,Spring Ждать.
    • Даже сами JDK и JVM имеют множество реализаций с открытым исходным кодом, таких какopenJDK,Harmony.
  • как сообщество,JavaБлагодаря наибольшему в мире количеству технических защитников и поддержке сообщества открытого исходного кода существует бесчисленное множество форумов и материалов. От программного обеспечения для настольных ПК, встроенной разработки до приложений корпоративного уровня, внутренних серверов и промежуточного ПО — вы можете увидеть  Javaфигура. Сложность формы заявки и большое количество участников также ошеломляют.

image.png

История Java

Прошло более 20 лет с момента рождения первой версии Java. Прошло четверть века. На временной шкале, показанной на рисунке 1-3, мы видим JDK. Версия эволюционировала до JDK 13. За последние два десятилетия появилось множество продуктов, технологий и стандартов, связанных с Java. Теперь давайте пройдемся по туннелю времени, начиная с эпохи зарождения языка Java, а затем рассмотрим путь развития и исторические изменения Java.image.png

  • В 1990 году в Sun Computer Company группа Green Team во главе с Патриком Нотоном, Майком Шериданом и Джеймсом Гослингом разработала новый язык программирования по имени дуб, позже названный Java.
  • В 1995 году язык Oak был переименован в Java, а версия Java 1.0 была официально выпущена на конференции SunWorld. Язык Java впервые предложил лозунг «Напиши один раз, работай где угодно».
  • .
  • 23 января 1996 года был выпущен JDK 1.0, и для языка Java появилась первая официальная версия среды выполнения.
  • 19 февраля 1997 года Sun выпустила JDK 1.1. Технические представители JDK 1.1: формат файла JAR, JDBC, JavaBeans, RMI и т. д.
  • В 1998 году JDK открыла важную веху версии, была выпущена версия JDK1.2. В то же время Sun выпустила спецификацию JSP/Servlet, EJB и разделила Java на J2EE, J2SE и J2ME. Это показывает, что Java начинает продвигаться в трех основных областях: предприятия, настольные приложения и приложения для мобильных устройств.
  • В 2000 году был выпущен JDK1.3, и была официально выпущена виртуальная машина Java HotSpot, ставшая виртуальной машиной по умолчанию для Java.
  • В 2002 году был выпущен JDK1.4, и древняя виртуальная машина Classic сошла со сцены истории.
  • В конце 2003 года был официально выпущен scala для платформы Java, и в том же году к лагерю Java присоединился Groovy.
  • В 2004 году был выпущен JDK1.5. В то же время JDK1.5 был переименован в JavaSE5.0.
  • В 2006 году был выпущен JDK6. В том же году исходный код Java был открыт, и был создан openJDK. Разумеется, виртуальная машина Hotspot также стала виртуальной машиной по умолчанию в openJDK.
  • В 2007 году у платформы Java появился новый партнер — Clojure.
  • В 2008 году Oracle приобрела BEA и получила виртуальную машину JRockit.
  • В 2009 году Twitter объявил, что перенесет большинство своих серверных программ с Ruby на scala, еще одно крупномасштабное внедрение платформы Java.
  • В 2010 году Oracle приобрела Sun, получив торговую марку Java и виртуальную машину HotSpot, представляющую наибольшую ценность. В настоящее время у oracle есть две виртуальные машины с наибольшей занятостью на рынке, HotSpot и JRockit, и в будущем планируется их интеграция: HotRockit
  • В 2011 году был выпущен JDK7. В JDK1.7u4 был официально включен новый сборщик мусора G1.
  • В 2017 году был выпущен JDK9. Установите G1 в качестве Gc по умолчанию вместо CMS
  • В том же году исходный код IBM J9 был открыт, сформировав нынешнее открытое сообщество J9.
  • В 2018 году было рассмотрено дело Android о нарушении прав Java, и Google выплатила Oracle компенсацию в размере 8,8 млрд долларов.
  • В том же году Oracle объявила, что JavagE стал историческим термином JDBC, JMS, Servlet, переданным в дар Eclipse Foundation.
  • В том же году был выпущен JDK11, выпущена LTS-версия JDK, революционный zGc, а также скорректировано лицензирование JDK.
  • В 2019 году был выпущен JDK12, присоединившийся к shenandoah GC во главе с RedHat.

Разница между OpenJDK и Oracle JDK

До JDK11 в oracleJDK по-прежнему будут некоторые функции с закрытым исходным кодом, недоступные в openJDK. Но в JDK11 мы можем думать, что код openJDK и oracleJDK был практически в той же степени.image.png

Виртуальная машина и виртуальная машина Java

виртуальная машина

Так называемая виртуальная машина (Virtual Machine), который является виртуальным компьютером. Это часть программного обеспечения, которая выполняет ряд инструкций виртуального компьютера. В целом виртуальные машины можно разделить на системные виртуальные машины и программные виртуальные машины.

  • известныйVisual Box,MwareОни относятся к системным виртуальным машинам, которые полностью имитируют физические компьютеры, предоставляя программную платформу, на которой может работать полная операционная система.
  • Типичным представителем программной виртуальной машины является виртуальная машина Java, которая специально разработана для выполнения одной компьютерной программы.Инструкции, выполняемые в виртуальной машине Java, называются инструкциями байт-кода Java.

Будь то системная виртуальная машина или программная виртуальная машина, работающее на ней программное обеспечение ограничено ресурсами, предоставляемыми виртуальной машиной.

Виртуальная машина Java

Виртуальная машина Java – это виртуальный компьютер, выполняющий байт-коды Java. Он имеет независимый операционный механизм, а исполняемые байт-коды Java не обязательно компилируются из языка Java. Различные языки платформы JVM могут совместно использовать кроссплатформенность, отличный сборщик мусора и надежный своевременный компилятор, обеспечиваемый виртуальной машиной Java. Ядром технологии Java является виртуальная машина Java (JVM, Java Virtual Machine ), потому что все Java-программы выполняются внутри виртуальной машины Java. Виртуальная машина Java — это операционная среда бинарного байт-кода, отвечающая за загрузку в нее байт-кода и его интерпретацию/компиляцию в машинные инструкции для выполнения на соответствующей платформе. Каждая инструкция Java подробно описана в Спецификации виртуальной машины Java, например, как извлекать операнды, как обрабатывать операнды и куда помещать результаты обработки. Функции:

  • Скомпилируй один раз, запускай везде
  • Автоматическое управление памятью
  • Функция автоматического сбора мусора

Расположение JVM

JVM работает поверх операционной системы и не имеет прямого взаимодействия с оборудованием.image.png

Java-архитектура

image.png

Общая структура JVM

  • HotSpot VM — одна из представительных работ высокопроизводительных виртуальных машин на рынке.
  • Он использует архитектуру, в которой сосуществуют интерпретатор и компилятор точно в срок.
  • Сегодня производительность программ на Java уже возродилась и достигла уровня, когда она может конкурировать с программами на C/C++.

Механизм выполнения состоит из трех частей: интерпретатора, своевременного компилятора и сборщика мусора.

Поток выполнения кода Java

image.png

Архитектурная модель JVM

Поток инструкций, вводимый компилятором Java, в основном представляет собой архитектуру набора инструкций на основе стека, а другая архитектура набора инструкций представляет собой архитектуру набора инструкций на основе регистров. В частности: разница между этими двумя архитектурами:Особенности архитектуры на основе стека 

  • Проще спроектировать и реализовать, подходит для систем с ограниченными ресурсами;
  • Избегайте проблемы распределения регистров: используйте выделение инструкций с нулевым адресом.
  • Большинство инструкций в потоке команд являются инструкциями с нулевым адресом, и процесс их выполнения зависит от стека операций. Набор инструкций меньше, а компилятор проще реализовать.
  • Не требуется аппаратная поддержка, лучшая переносимость, лучшая межплатформенная реализация

Особенности архитектуры на основе регистров 

  • Типичными приложениями являются двоичный набор инструкций x86: например, традиционный ПК и виртуальная машина Android Davlik.
  • Архитектура набора инструкций полностью зависит от аппаратного обеспечения и имеет плохую переносимость.
  • Отличная производительность и более эффективное исполнение
  • Возьмите меньше инструкций, чтобы завершить операцию.
  • В большинстве случаев в наборе инструкций, основанном на регистровой архитектуре, обычно преобладают одноадресные инструкции, двухадресные инструкции и трехадресные инструкции, в то время как набор инструкций, основанный на архитектуре стека, в основном основан на инструкциях с нулевым адресом.

Добро пожаловать в публичный аккаунтгорный плотник,Меня зовут Сяочунь, я занимаюсь back-end разработкой на Java. Я немного разбираюсь в front-end, и благодаря непрерывному выпуску серии технических статей я встречу друзей. Если эта статья может вам помочь, вы добро пожаловать, чтобы обратить внимание, как, поделиться и поддержать.Увидимся в следующий раз!