Разделение памяти Java:
При распределении памяти Java Java делит память на: область метода, кучу, стек виртуальной машины, стек локальных методов и счетчик программ. Область метода и куча используются всеми потоками, в то время как стек виртуальной машины, стек локальных методов и счетчик программ изолированы от потоков. Каждая область имеет свое время создания и разрушения.
Счетчик программ:
Он используется как индикатор номера строки байтов, выполненных текущим потоком. Многопоточность Java реализуется путем поочередного переключения потоков и распределения времени выполнения процессора. Следовательно, чтобы каждый поток после переключения вернулся в правильное положение, каждому потоку необходим независимый программный счетчик.
Стек виртуальной машины Java:
При выполнении каждого из них одновременно будет создан кадр стека для хранения таблиц локальных переменных, стеков операндов, динамических ссылок, выходов методов и другой информации. Стек виртуальной памяти — это то, что мы часто называем «стеком». Память, необходимая для таблицы локальных переменных, выделяется во время компиляции.
Стек локальных методов:
Как и в случае со стеком виртуальной машины, разница состоит в том, что стек виртуальной машины выполняет службы методов Java для виртуальной машины, а стек локальных методов обслуживает виртуальную машину с использованием собственных методов.
Куча Java:
Общий для всех программ и создается при запуске виртуальной машины. Эта область памяти используется для хранения экземпляров объектов. Согласно правилам виртуальных машин Java, куча Java может находиться в физически прерывистом пространстве памяти, если она логически непрерывна.
Область метода:
То же, что и куча, разделяемая между потоками. Его функция заключается в хранении таких данных, как информация о классе, константы, статические переменные, код, скомпилированный JIT-компилятором, и т. д., которые были загружены виртуальной машиной.
Пул констант времени выполнения:
Является частью области метода. Его функция — хранить различные ссылки на литералы и символы, сгенерированные во время компиляции.