Всем привет 👋 Я Гаурав Гупта, студент бакалавриата, изучающий информатику из Индии. Прежде чем мы погрузимся в блог, сначала я хотел бы рассказать вам о том, почему этот блог существует и что будет Хранилище знаний .
Почему существует этот блог
С тех пор как я начал программировать, я всегда чувствовал, что мне чего-то не хватает, и я продолжаю обнаруживать пробелы в своих знаниях по многим темам, иногда основы не сильны, а иногда это некоторые продвинутые темы.
Я пишу, чтобы узнать то, что я знаю. – Фланнери О’Коннор
Я хотел записать свой путь программирования и полученные знания, чтобы определить, что я знаю и где я могу улучшить. Эта идея оказалась здесь в виде блога, а не физического журнала моих знаний, потому что я либо теряю их, либо просто никогда не возвращаюсь и регулярно пересматриваю. Из-за моей личности я постоянно проверяю свои посты или любые действия, которые я обнародовал, где люди могут видеть и судить меня. Это, по крайней мере, заставит меня постоянно проходить через свои знания, помогая мне пересматривать материал. Это породило Хранилище знаний.
❗ ❗ Примечание: Ни в коем случае, я не являюсь экспертом по темам, которые я буду писать в этом блоге, вы можете рассматривать это как точку зрения и понимание новичка.
Каким будет Хранилище знаний?
Хранилище знаний будет больше похоже на онлайн-журнал моих исследований в области программирования. Если мое хранилище может помочь некоторым людям, я надеюсь, что смогу рассматривать его как свой вклад в сообщество.. Недавно я начал изучать Java, и даже после ознакомления с концепциями, которые я записал в своей физической записной книжке, я обнаружил недостатки в своих знаниях, когда посещал те же лекции в колледже. Итак, этот пост в блоге будет посвящен всему, что я узнаю во время своего путешествия по Java, где я могу учиться у других критиков и предложений.
Предложения и ресурсы по улучшению меня очень ценятся. 💖 Итак, без лишней болтовни, давайте начнем.
Что такое Java?
Java – это объектно-ориентированный язык программирования общего назначения, основанный на классах, предназначенный для использования с меньшими зависимостями от реализации. Это быстро, безопасно и надежно.
Чем выполнение Java отличается от других объектно-ориентированных языков
В объектно-ориентированном языке, таком как C++, код высокого уровня, который читается человеком, компилируется непосредственно в код машинного уровня (0 и 1). Этот машинный код зависит от платформы (т.Е. зависит от операционной системы, на которой он скомпилирован). Например, если файл C++ скомпилирован на компьютере с Windows, то скомпилированный машинный код (файл .exe) не будет выполняться на компьютере Mac и наоборот.
Чтобы преодолеть эту проблему, Java создает байт-код (файл .class) при компиляции, который не зависит от платформы и может совместно использоваться машинами с разными операционными системами. Но этот байт-код не может быть непосредственно запущен в системе и требует выполнения виртуальной машины Java (JVM). Эта JVM зависит от платформы, т.е. каждая ОС имеет версии JVM, зависящие от платформы, которые используются для выполнения этого байт-кода.
Структура Java
ух ты! Это выглядит многослойным и сложным 😱 Поверьте мне, ТАК ОНО и ЕСТЬ 🙂
Итак, давайте начнем с самого внешнего слоя.
Набор для разработки Java (JDK)
JDK предоставляет среду для разработки и выполнения (запуска) Java-программ. Это пакет, который включает в себя:
- Инструменты разработки – Среда для разработки программ
- Среда выполнения Java (JRE) – Для выполнения программ
- Компилятор (javac)
- Архиватор (jar)
- Генератор документации (javadoc)
- Переводчик/Загрузчик
Среда выполнения Java (JRE)
JRE (также написанный как Java RTE) представляет собой установочный пакет, который обеспечивает минимальные требования ТОЛЬКО для выполнения Java-программы на вашем компьютере. Он состоит из:
- Технологии развертывания
- Наборы инструментов пользовательского интерфейса
- Библиотеки интеграции
- Базовые библиотеки
- Виртуальная машина Java (JVM) – JRE предоставляет все библиотеки и файлы, необходимые JVM
Виртуальная машина Java (JVM)
JVM – это абстрактная машина/спецификация, предоставляющая среду выполнения, в которой может выполняться байт-код java. JVM выполняет следующие операции:
- Загружает код
- Проверяет код
- Выполняет код
- Обеспечивает среду выполнения
Архитектура JVM
При компиляции компилятором java (javac) исходный файл Java (файл .java) выдает файл байт-кода (файл .class), который затем передается в качестве входных данных в JVM, в частности в подсистему загрузки классов.
Подсистема загрузчика классов в основном выполняет 3 функции:
- Загрузка : Он считывает файл .class и генерирует двоичные данные. Объект этого класса создается в куче. Это дополнительно содержит 3 модуля – Загрузчик классов начальной загрузки, Загрузчик классов расширения и загрузчик классов приложений.
- Связывание : Основные функции связывания включают проверку, подготовку и разрешение. Здесь JVM проверяет файл .class, выделяет память для переменных класса и значений по умолчанию и заменяет символические ссылки из типа прямыми ссылками.
- Инициализация : Всем статическим переменным присваиваются их значения, определенные в коде и статическом блоке. При выполнении JVM интерпретатор выполняет код построчно. Но одно из ограничений заключается в том, что когда метод вызывается много раз, он будет интерпретировать его снова и снова.
Выполнение внутри подсистемы загрузчика классов – Загрузка -> Связывание -> Инициализация.
JVM также содержит распределение памяти стека и кучи, но я не буду вдаваться в подробности, чтобы избежать информационной перегрузки и путаницы (я также не понимаю деталей 😣 ). Это нормально, если вы не совсем понимаете вышеприведенную архитектуру, как и я. Основной сути этого должно быть достаточно для начала, мы вернемся к деталям позже.
Более простой способ понять связь между JVM и JRE: JRE – это коробка, а JVM – это содержимое внутри коробки, которое выполняет основную работу.
Точно в срок (JIT)
Он также называется сборщиком мусора, и его основная цель – решить проблему ограничения выполнения JVM. Методы, которые многократно вызываются, JIT предоставляют прямой машинный код, поэтому их интерпретация не требуется, что приводит к более быстрому выполнению.
Краткое описание рабочей архитектуры JVM
Чтобы обобщить рабочую архитектуру Java на более простой диаграмме для лучшего понимания, вы можете посмотреть на приведенную ниже диаграмму.
Я думаю, что этой теории должно быть достаточно для таких новичков, как я, даже если она не совсем понятна, это нормально. В следующий раз мы продолжим, начиная с части кодирования (надеюсь 👀 ). Я очень признателен за любые предложения или ресурсы, которые помогут мне лучше понять и которые были бы полезны другим. 💖
PS: Вы также можете найти меня на HashNode
До следующего раза. Пока 👋
Оригинал: “https://dev.to/gauravgupta/java-the-beginning-part-1-the-theory-4ie7”