Виртуальная машина Java (JVM) и ее архитектура — Guru99

JVM(Java Virtual Machine) это среда для запуска Java приложений. При запуске Java программы вызывается метод main, который реализован в java коде. JVM это часть JRE (Java Runtime Engine).

Java приложения называются WORA (Write Once Run Everywhere) приложениями, то есть буквально напиши один раз и запускай везде. Это означает что разработчик может создать Java код на одной операционной системе и запустить его в другой системе, в которой установлена JRE без каких-либо дополнительных настроек. Это все возможно потому что это JVM.

Когда мы компилируем .java файл, создается .class файл (java byte code) с таким же названием, этот файл генерируется Java компилятором.

Class Loader Subsystem

В основном отвечает за эти три активности:

  • Загрузка
  • Ссылки
  • Инициализация

Загрузка

Для каждого .class файла, JVM хранит следующую информацию в области методов:

  • Полное имя загружаемого класса и его непосредственные родительские классы.
  • Определяет является ли .class файл Java классом, интерфейсом или Enum.
  • Определяет поля, переменные и информацию о методах и т.д.

После загрузки .class файла, JVM создает объекты класса в области Heap памяти. Необходимо помнить что этот объект является типом Class, который определен в пакете java.lang. Объект этого класса программист может использовать для получения информация уровня класса, например, имя класса, имя родительского класса, методы класса, переменные и так далее. Чтобы получить все эти данные необходимо вызывать метод getClass() у этого объекта.

Результат выполнения данной программы:

Заметка: Для каждого загруженного класса (.class), создается только один объект.


Ссылки

  • Проверка : Гарантирует корректность .class файлов. Проверяет что конкретный  .class был скомпилирован и сгенерирован валидным компилятором. Если проверка не пройдена, то возникает run-time exception . Подготовка : JVM выделяет память для переменных класса и инициализирует эти переменные в памяти значениями по умолчанию.

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

Три основные загрузчика классов (cloass loaders):

  • Bootstrap class loader:  Каждая реализация JVM должна иметь bootstrap class loader, способная загружать проверенные классы. Загружается основное API Java классов, которое находится в директории . Этот путь так же называют bootstrap path. Загрузчик реализован на языках C, C++.
  • Extension class loader: Это дочерний загрзчик bootstrap class loader. Он загружает классы, которые представлены в дирекотрии  или в любой другой директории, которая описана в системной переменной java.ext.dirs. Это функция реализована с помощью Java  class
  • System/Application class loader: В свою очередь это дочерний загрузчик extension class loader. Загружает классы из области приложения (application classpath). Так же реализован с помощью Java  class.

Результат выполнения программы:


Память JVM

  • Область методов: В области методов, находится все информация о классе, например, имя класса, имена родительских классов, методы и переменные, а так же прочая информация, включая статические переменные. Существует всего одна область методов во всей JVM и это область общий ресурс для всех программ, работающих в этой JVM.
  • Heap area: Здесь хранится вся информация об объектах. Существует всего одна область Heap в JVM и доступная всем программам, которые работают в этой JVM.
  • Stack area: Для каждого потока, JVM создает свою область (run-time stack) котоаря хранится здесь. Каждый блок этого стэка называется активная запись / окно стека (activation record/stack frame), В этой области хранятся вызовы методов. Все локальные переменные этих методов хранятся в этом выделенном стеке. После того как поток завершает свою работу, выделенный стэк уничтожается. Это не общедоступный ресурс.
  • PC Registers: Хранит адреса текущих инструкций потока. У каждого потока своя область PC Registers.
  • Native method stacks: Для каждого потока создается отдельная область Native method stacks. В этой области хранится информация о нативных методах.

Движок выполнения (Execution Engine)

Execution engine выполняет байткод .class файла. Он считывает байткод последовательно, строчка за строчкой, использует информацию, которая находится в разных областях памяти JVM и выполняет инструкции кода.

Free Java Download

Можно разделить на три составляющих:

  • Интерпретатор (Interpreter): Интерпретирует байт код в команды и выполняет их. Недостаток в том что каждый раз когда нужно выполнить команду, необходимо интерпретировать байт код в понятную для JVM команду, даже если вызывается один и тот же метод несколько раз.
  • Just-In-Time Compiler(JIT): Используется для увеличения эффективности интерпретатора. Он компилирует весь байткод и преобразует его в нативный код, всякий раз когда встречает повторяющиеся вызовы методов. JIT поставляет нативный код и повторная интерпретация не нужна, поэтому увеличивается эффективность.
  • Сборщик мусора (Garbage Collector):  Уничтожает не используемые объекты.

Java Native Interface (JNI)

Это интерфейс для взаимодействия с нативными методами системных библиотек, которые могут быть написаны на C, C++. Для вызова методов из системных библиотек (например или ) необходимо указать где именно это библиотека находится, чтобы JVM знала об этой библиотеке.

Native Method Libraries

Это набор нативных библиотек (C, C++), которые необходимы для работы Execution Engine.

Данный материал является переработанным переводом этой статьи с небольшими дополнениями.

Java Аргументы для Minecraft

Софья Брайченко · 7,980 Просмотры

Java Аргументы для Minecraft
http://moh.nerad.ru/Java%20%D0%90%D1%80%D0%B3%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D0%B4%D0%BB%D1%8F%20Minecraft

На Minecraft по умолчанию выделяется всего 1 Гигобайт оперативной памяти и я думаю вы со мной согласитесь, что это очень мало.

Далее мы переходим в раздел Java , и нажимаем кнопку: "View". Далее у нас открывается вот такое окно Выделение памяти для Java Minecraft — Дивитися 11:14 Збережена копія Показати ще із сайту Поскаржитися Выделение памяти для Java Minecraft. MrSt4vR. . КАК УБРАТЬ ЛАГИ В MINECRAFT РЕАЛЬНО — AymanCartoons. Как выделить java "e больше памяти? " MineZone mine zone.pro Шаг 1. Запустите "Панель управления" CONTROL PANEL. Шаг 2. Введите " Java " в окне поиска окна "Панели управления". Шаг 3. Кликните по значку Java , который у вас появился в результате поиска. Шаг 4. В запустившемся окне выберите " Java ". Как Увеличить Количество Выделяемой ОЗУ в Minecraft mine Рецепты крафта в Minecraft. Id предметов Minecraft. Как нарисовать Pixel-art для Minecraft . А вот в аргументы Java в самом лаунчере,вставьте второй " аргумент ". Ушел с сайта. Руководство — работы Java Аргументы Minecraft форум mymine .su Аргументы JVM прописываются в специальном поле настроек профиля в лаунчере Minecraft , на скриншоте ниже, вы можете увидеть поле для  Пример записи: -Xincgc —— -d32 — принудительный запуск виртуальной машины Java в 32-битном режиме. Эксперты: Как увеличить память java на pc otvet Руководство Ускорение работы Java Аргументы. Тема в разделе " Общие руководства", создана пользователем Starr, 29 сен 2015. Аргументы для клиента Java 7 АХТУНГ Оптимизация работы клиента TechnicInsanity. Как увеличить память java на pc. Никита Цхай Знаток 310, закрыт 4 года назад. Вылетает игра Minecraft с сообщением которое в переводе означает недостаточно памяти. FAQ — Технические проблемы — Форум Minecraft У вас на счету много оперативной памяти, но java использует только меньшую её часть? Тогда загляни сюда!Сейчас я вам покажу как выделить для java больше оперативной памяти. моды для Minecraft 1.8.

Java Virtual Machine

Выделение оперативной памяти minecraftу Форум ru- minecraft Пишете в нем java место для аргументов -cp Minecraft .jar net. minecraft .LauncherFrame. Сохраняете его как .bat файл и кидаете в одну папку с лаунчером. 27 вересня 2011 Как выделить оперативную память под Java

Флаг указывает максимальный пул распределения памяти для виртуальной машины Java (JVM), а указывает начальный пул распределения памяти.

Это означает, что ваш JVM будет запущен с объемом памяти и сможет использовать максимум объема памяти. Например, запуск JVM, как показано ниже, запустит его с 256 МБ памяти и позволит процессу использовать до 2048 МБ памяти:

Флаг памяти также может быть указан в нескольких размерах, таких как килобайты, мегабайты и т.д.

Флаг не имеет значения по умолчанию, а обычно имеет значение по умолчанию 256 МБ.

Что такое JVM?

Общее использование этих флагов — это когда вы сталкиваетесь с .

При использовании этих настроек имейте в виду, что эти настройки предназначены для кучи JVM и что JVM может/будет использовать больше памяти, чем размер, выделенный для кучи.

Из Документация Oracle:

Обратите внимание, что JVM использует больше памяти, чем просто кучу. Например, методы Java, стеки потоков и собственные дескрипторы выделяются в памяти отдельно от кучи, а также внутренние структуры данных JVM.

ответ дан hexacyanide 08 февр. '13 в 2:29

источникподелиться

Добавить комментарий

Закрыть меню