Основные области данных времени выполнения (Runtime Data Areas) в Java Virtual Machine (JVM):
Method Area (Область Методов): Хранит метаданные классов (имена, модификаторы, информацию о суперклассах), константный пул, байт-код методов и поля класса. Является общей для всех потоков.
Heap (Куча): Общая для всех потоков область памяти, где хранятся объекты классов и их экземпляры. Управляется сборщиком мусора. Именно в куче происходит выделение памяти с помощью оператора new.
Stack (Стек): Каждый поток в JVM имеет свой собственный стек. В стеке хранятся фреймы (стековые кадры), которые создаются при каждом вызове метода. Фрейм содержит:
PC Register (Программный Счетчик): Каждый поток имеет свой PC Register. Хранит адрес инструкции JVM, которая выполняется в данный момент. Для native-методов значение PC Register определено как undefined.
Native Method Stacks (Стеки Нативных Методов): Поддерживают выполнение нативных методов (написанных не на Java). Может быть реализовано с использованием обычного стека ОС.
Пример взаимодействия областей:
java
В этом примере:
MyObject и Main находятся в Method Area.MyObject находится в Heap.localVar, obj, args, result, а также параметры и локальные переменные внутри MyObject находятся в Stack соответствующих потоков.