Области данных виртуальной машины Java
Каждый поток виртуальной машины Java имеет свой собственный стек, созданный в момент создания потока. Стек содержит кадры виртуальной машины и является эквивалентом стека в обычном языке, таком как C. Он содержит локальные переменные и результаты промежуточных вычислений, а также активно используется механизмом вызова и возврата из методов.
Виртуальная машина Java имеет динамически распределяемую область (heap), общую для всех ее потоков. Это область, из которой динамически выделяется память для всех экземпляров классов и массивов. Она создается при старте виртуальной машины.
Виртуальная машина Java может поддерживать множество потоков(нитей, threads) исполнения одновременно. Каждый такой поток имеет свой собственный регистр pc (program counter). В любой момент времени поток виртуальной машины исполняет код одного метода, являющегося текущим для данного потока. Если этот метод не является native, регистр pc содержит адрес инструкции виртуальной машины, исполняющейся в данный момент. В противном случае его значение не определено. Размер этого регистра соответствует размеру типа word.
Виртуальная машина Java имеет область методов (method area), общую для всех ее потоков. Эта область аналогична области компилированного кода в обычных языках программирования или сегменту "TEXT" в процессе UNIX. В ней хранятся информационные структуры классов - область констант, поля и данные методов, а также код методов и конструкторов, включая специальные. Эта область создается при старте виртуальной машины.
Область констант - это специфическое представление для каждого класса или интерфейса таблицы constant_pool в class-файле Java. Она содержит несколько типов констант, начиная от числовых литералов, известных во время компиляции до ссылок на поля и методы, которые должны быть разрешены во время исполнения. Эта область выполняет функцию, аналогичную символьной таблице в обычном языке программирования.
Реализация виртуальной машины Java может использовать такие стеки для поддержки native-методов, т.е. методов, написанных не на языке Java. Также они могут быть использованы для реализации эмулятора инструкций виртуальной машины Java в таких языках, как например C.
|