Глава 10 стеков и локальные переменные операции

10,1 Constant штабелирования является
много кода для выполнения операции постоянной работы кнопки. Опкод перед выполнением операции постоянной толчок, следующие три метода указан постоянное значение: постоянное значение неявно включенное во внутреннем коде операции, значение константы в потоке байт - коды в качестве операндов непосредственно после кода операции, постоянная или взяты из постоянного пула.

Некоторые самостоятельно код операции, указывающий тип и значение константы стека, например, iconst_1 опкод информирования виртуальной машины Java представляет собой тип Int числа людей к давлению стека. Виртуальная машина Java определяет некоторые из этих опкодов для различных типов данных, часто давление на человек различных стеков. В отношении выборки команды операндов из или направленного постоянного потока байткода бассейна, вышеприведенные инструкции являются избыточными инструкциями, но они более эффективны. Поскольку эти инструкции занимает только один байт пространства в потоке байтов, они улучшают байткод эффективность и размер Сюэ менее байткод. Человеческое давление на INT и поплавковых значения кодов операций типа стека, как показано в таблице 10-1.

Опкоды показано в таблице 10-1 в пресс-фитинг типа Int и плавать Zhan, Int, и является длина слова поплавка. Длина каждого места стеки Java является длиной слова (по крайней мере, 32 бита). Таким образом, каждый раз, когда пресс-тип с плавающей запятой INT людей или стек, он будет занимать позицию.

Код операции, как показано в таблице 10-2 длинные и двойные значения давления, чтобы найти людей. в длину и два раза значение 64 битовой длины. Всякий раз, когда значение длинного или двойного типа стеки нажимается человек, который будет занимать две позиции.

Другой код операции может быть постоянной неявное объявление на стек. Как показано в Таблице 10-3, aconst_null опкод давления объект пустая ссылка типа стека на людей.

Как уже упоминалось выше, ссылка на объект формат зависит от конкретной реализации виртуальной машины Java. Ссылка на объект может заложить свое замечательное имя точки для сбора мусора кучи Java объектов. Пустая ссылка на объект точка, чтобы указать в настоящее время не подлежит никаких уважительных объектные ссылки переменными. Процесс назначен на объект пустой ссылки переменной F будет использоваться aconst_nuli кода операции.

Как показано в таблице 10-4 два опкоды для постоянного давления на целом числе людей стеку, значение целочисленных постоянного байта в пределах допустимого диапазона типов данных и короткие, эти две операций с использованием коды непосредственно после операции операнд после кода явно заданные константы будут в стек. Сразу после опкода байт, или короткий типа распространяется на целочисленное значение, прежде чем люди стеки давления. Значение целого типа надевается на операцию стеки и фактически заменяет короткое значение байта типа на вершину стеки операции.

 

Три кода операции, как показано в таблице 10-5 взяты из постоянной в постоянном пуле затем прессуют людей стек. Эти опкоды с использованием операндов индекса постоянного пула, Java виртуальной машины через данный индекс, чтобы найти соответствующую постоянную запись пула, и определяют тип значений этих констант, и подтолкнуть их люди складывают.

 

Константа индекс пула является значение без знака, то отсюда следует непосредственно за кодом операции в потоке байтов. ldc_w LDC и код операции двух слов к элементу в стек, или который является INT, значение типа поплавка, или ссылка на объект типа String. МЦД и разница между ldc_w содержит: индекс LDC, поскольку существует только одна длина слова, это может указывать только на 1-255 в постоянном пуле (постоянное положение 0 бассейн не используется) в диапазоне положений. А индекс ldc_w два байта длины, и, следовательно, она может указывать на любой позиции постоянного пула содержит длинный тип или двойной тип (занимающую два байта длины). Постоянное давление со снятым человеком постоянная бассейна глядя опкода, как показано в таблице 10-5.


Все исходные Java-код строковые литералы в конечном счете хранится в виде записи в постоянном пуле. Если же приложение несколько классов используют один и тот же строковый литерал, то текст будет отображаться в строке, чтобы использовать все его класс в файле класс. Например, если есть три класса, используя строковый литерал «Harumph!«Тогда эта строка будет отображаться в три постоянных пуле файла класса. Метод может использовать эти классы или инструкции ldc_w МЦД точку с»Harumph ! «Строка ссылка на объект значение в стек.

Как описано в главе 8, виртуальная машина Java все текстовые символы в тот же характер, как же процедуры обработки объекта String. Другими словами, если вы используете более одного класса с строковый литерал, например, «Harumph!», Java виртуальная машина будет иметь только создать «Harumph!» Объекты Строка для представления значения всех строковых литералов.

Когда виртуальная машина разбор записи строкового литерала постоянного пула, это «задержание» строка. Во-первых, виртуальные машины проверяет символы в порядке строки уже задержан. Если это так, то виртуальная машина будет использовать ссылку строка имеет попечение одного и того же. В противном случае, он будет создавать новый объект String, которые были добавлены к коллекции строк в задержании ссылки на новый объект строкового затем, затем присваивает ссылку на эту новую строку был задержан.

10.2 Операций Общей стеки

Хотя большинство команд Java набор команд виртуальной машина имеет дело только с определенным типом, но есть некоторые инструкции могут быть независимы от типа операции, чтобы найти. Как описано в главе 5, общая (не тип) инструкция не может быть использована для разложения значения имеет длину два слова. Эти инструкции, приведенные в таблице 10-6.

 

 

10.3 локальные переменные в стек

Несколько код операции для типа Int и Float стек местных жителей под давлением типа переменной. Некоторые опкод косвенно указывает на положение локальных переменных обычно используется. Например, iload_0 локальный тип переменной INT считаны в ячейке 0. В то время как другие были индексные переменной локальной переменной локальной считано из первого байта сразу после позиции опкод давления стека опкода на человек.

С плавающей точкой и код операции давления переменного типа INT Human стека локального показано в таблице 10-7.

В таблице 10-8 перечислены типы инструкций длинные и двойные типы давления локального стека переменного на человек. Эти инструкции перемещение данных разрядности сегмента из операнда стека локальной секции переменного кадра стека.

Локальные переменные в стек последнего человека опкод операнд группы сегментов в качестве ссылки двигающегося объекта (размер слова отпечатка) сегмент от локального кадра стека переменного. Эти коды операций приведены в таблице 10-9

10,4 поп-топ стек элемент, который присваивается локальной переменной

Локальные переменные для каждого кода операции в выражении в стек, то найти соответствующие попы верхнего элемента и сохраняются в локальную переменной коду операции. Операция извлечения диска выполняется Опкод Мнемоник Опкод мнемонического давлении люди стеки операций, выполняемая в «экономии» в «нагрузку» представляет собой способ. Таблица 10-10 показывает поп, глядя с вершины типа операнда и значение типа fioat Int и сохраняет его в локальной переменной коде операции. Эти опкоды двигаться от верхней части стека локальных переменных - значение длины слова.

10,5 широкая инструкция

Беззнаковый индекс 8-битного локальные переменные (такие, что последующие инструкции Iload индекса), количество локальных переменных в способе ограниченно до 256 или менее. Широкий одна команда может быть 8-битовый индекс продлен на 8 бит может быть расширен таким образом, чтобы ограничить количество локальных переменных 65536. Другой модифицированы широкий опкод опкод. Широкие инструкции с помощью инструкции могут быть выполнены без знака 8-битовый индекс локальных переменных, таких как спереди или как Iload. В следующих двух байт после кода операции и шириной модифицированных опкодами беззнаковых 16-битных индексных точек в локальных переменных.

Таблица 10-13 перечисляет все команды, которые могут быть изменены Широкий код операции (с двумя исключениями) исключение две инструкции (МИНЦ и RET) будет обсуждаться в следующем разделе. Команда МИНЦ и его широкая переменная будет обсуждаться в главе 12. RET инструкции и ее широко переменная рассматривается в главе 18.

Когда последовательность аутентификации включает в себя широкие инструкции байткода, модифицированный широкий рабочие инструкции код выглядит следующим образом - из широкой передачи операндов. Инструкция Прыгать и не допускает прямое указание перехода должны быть изменена в широком опкоде. Например, если поток байт включает в себя последовательность следующей инструкции

широкий Iload 257

Затем последовательность байтов потока этого метода не позволяет любые другие опкоды непосредственно перейти к Iload опкода. В этом случае, Iload опкод всегда должен быть выполнен в виде широким операнда опкода.

Javac компилятор в локальную переменную из исходного файла и стека кадра 0 | расположение локально гало, Ь в положение стека кадра 2 и 3, fiboNum помещен в положении 4 и 5. Всякий раз, когда последовательное расчётное число Фибоначчи, Javac компилятор будет хранить этот номер переменной fiboNum. Соответственно, когда операция будет найти последовательность Фибоначчи | Ong значения формы тип, хранящийся в локальных переменных в 4 и 5 положениях.

Можно отметить, значение типа длительного хранения разделен на две части, нижней (от 0 до 31), которые хранятся в первом положении, Гао биты (от 32 до 63), расположенных во втором положении. Например, низкий fiboNum локальная переменная хранится в переменных положени х 4, Гао биты сохраняются в локальной переменной в положении 5. Zhan операнд в том же, когда длинное значение типа помещается в стек, тем меньше будет в первую очередь в стек, а затем перейти к следующему высокому уровню.

Имейте в виду, что: это представляет собой значение типа длинный путь только для моделирования виртуальной машины Java реализована в ожидании локальных переменных и операндов, глядя в. Как описано в главе 5, спецификация не определяет какой-либо конкретный метод, чтобы определить, как долго тип и тип размещения двойное слово в кадре стека.

 

рекомендация

отwww.cnblogs.com/mongotea/p/11980063.html
рекомендация