1. Обзор
Виртуальная машина Java разделит память, которую она управляла несколькими различными областями данных в процессе выполнения программы Java. Память, управляемая виртуальной машиной Java, будет включать в себя следующие области данных времени выполнения, как показано на рисунке ниже:
Следующее объясняется в каждой области.
Во -вторых, в рамках программы «Br />» программы <Br /> может рассматриваться как индикатор номера строки байтового кода, выполненного текущим потоком. В концептуальной модели виртуальной машины работа интерпретатора рабочего кода состоит в том, чтобы выбрать инструкции по коду байта, которые необходимо выполнять, изменяя значения счетчика программы. Восстановление потока и другие основные функции должны полагаться на этот счетчик для завершения.
В многочисленных, чтобы позволить потоке вернуться в правильную позицию выполнения, каждый поток должен иметь независимый программы.
Когда поток выполняется, является методом Java, этот счетчик записывает адрес инструкции по коду виртуального машины, которая выполняется;
Эта область памяти является единственной областью, в которой не указывается какой -либо OutfmemoryError.
Java Virtual Machine Stack
Стек виртуальных машин Java также является частным, а его жизненный цикл такой же, как и потоки. Стек виртуальных машин описывает модель памяти, выполненную методом Java: каждый метод создаст кадр стека для хранения локальных таблиц переменных, управления стеками, динамических связанных списков, информации об экспорте метода и т. Д. Из процесса вызова до тех пор, пока не будет вызван процесс завершения, он соответствует процессу ввода стека в стеке виртуальных машин в стек.
В таблице локальных переменных различные основные типы данных (логические, байт, чар, короткие, плавучие, длинное, двойное), ссылки на объекты и типы returnaddress хранятся в компиляторе.
Если вы не можете подать заявку на достаточную память во время расширения, будет выброшено исключение OutofmemoryError.
Локальный стек методов <br /> локальный стек методов аналогичен виртуальной машине. Полем Некоторые виртуальные машины напрямую объединяют локальный стек методов и стек виртуальных машин в один.
Будет бросить StackOverFlowerRor и аномалии OutOfMemoryError.
Java Pule
Сбор Java - это область памяти, разделяемой всеми потоками.
Java Pule является основной областью управления коллекционером мусора. Поскольку коллекционер в основном используется для разделения алгоритмов утилизации, куча Java также может быть подразделена как: новое поколение и старость. С точки зрения распределения памяти куча Java -заседания поток может разделить несколько потоков в частном распределенном буфере (TLAB).
Сычка Java может находиться в физическом прерывищем пространстве памяти, если она логически непрерывна. С точки зрения реализации, он может не только достичь фиксированного размера или расширения.
Если в куче распределения экземпляра для завершения памяти нет, а куча не может быть завершена, OutofmemoryError будет выброшен.
Метод зона
Область метода представляет собой область памяти, разделяемой различными потоками.
Относительно говоря, в этой области редко появлялось поведение сбора мусора, но оно не существует постоянно в области ввода данных.
Когда область метода не может удовлетворить потребности распределения памяти, OutofmemoryError будет выброшен.
Постоянный бассейн:
Это часть области метода, которая используется для хранения различных типов и ссылок на символы, генерируемые периодом компиляции.
Прямая память
Прямая память не является частью области данных, когда работает виртуальная машина.
Прямое распределение памяти не будет ограничено размером с кучи Java, но оно будет ограничено размером памяти, и все они могут также бросить исключение OutofmemoryRerror.
В -третьих, процесс создания, макета и доступа объектов
Создание объекта
Создание объекта обычно требует нового ключевого слова. Если соответствующий процесс загрузки класса выполнен.
После того, как класс загружен, виртуальная машина будет выделять память для новых студентов. Задача выделения пространства для объекта эквивалентна разделению куска памяти, определяемой размером от кучи Java. Есть два способа распределения: один называется столкновением. Другое имя является пустым списком: если память в куче Java не является регулярной, виртуальная машина должна сохранить один список, который записывает, какой блок памяти доступен. Экземпляр объекта. Какой метод распределения определяется тем, регулируется ли куча Java, и определяется ли куча Java с помощью того, используется ли коллектор мусора с сжатием и организационной функцией. Другая проблема, которую необходимо учитывать, -это проблема безопасности потока, когда объект создает. памяти (TLAB) в сваде Java.
После того, как распределение памяти завершено, виртуальной машине необходимо инициализировать распределенное пространство памяти до нулевого значения. Этот шаг гарантирует, что поле экземпляра объекта можно использовать непосредственно в коде Java без начального значения.
Затем виртуальная машина должна установить необходимые настройки, например, какой класс этого объекта является экземпляром класса, как найти информацию о метаданных класса и т. Д. Эта информация хранится в главе объекта объекта.
После того, как вышеупомянутая работа завершена, с точки зрения виртуальной машины был сгенерирован новый объект. Однако с точки зрения программы Java, метод инициализации также необходим для инициализации объекта в соответствии с пожеланиями программиста.
Макет памяти объекта
В виртуальной машине горячей точки макет объектов в памяти можно разделить на три части: головка объекта, данные экземпляра и заполнение выравнивания.
Направляемость объекта включает в себя две части: первая часть используется для хранения данных самого объекта, таких как хэш -код, возраст старения GC и замки, удерживаемые потоками. Чиновник называется «Марк Слово». Вторая часть - это указатель типа, то есть указатель объекта на его классовые метатные данные, и виртуальная машина определяет, какой класс этого объекта является этим указателем.
Данные экземпляра представляют собой эффективную информацию, хранящуюся в объекте, а также является разнообразным полевым контентом, определенным в коде программы.
Заполнение выравнивания не обязательно существует, просто играет роль оккупационного персонажа. Hotpot VM требует, чтобы начальный адрес объекта должен был быть целым числом из 8 байтов. выравнивание.
Позиционирование доступа к объекту
Программа Java управляет конкретным объектом в стеке с помощью эталонных данных в стеке. Основными методами доступа являются два типа: ручка и прямой указатель:
Персонал: Java Heaps будет нарисовать кусок памяти в качестве пула ручки. Как показано на рисунке:
Прямой указатель: макет объекта Java Pile должен рассмотреть вопрос о том, как разместить соответствующую информацию типа данных типа доступа, а адрес объекта сохраняется в ссылке. Как показано на рисунке:
Два метода имеют свои преимущества Время расходы на позиционирование указателя.
Выше всего содержимое этой статьи.