|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Загальний огляд віртуальної машини JavaРівень команд машини JVM незвичайний, але достатньо простий. Ми вже частково розглянули його під час вивчення машини JVM. Порядок байтів зворотний. Пам'ять містить 4 основні області: фрейм локальних змінних, стек операндів, область процедур і набір констант. Нагадаємо, що в реалізаціях Mic-x машини IJVM на ці області указують регістри LV, SP, PC і СРР. Доступи до пам'яті повинні здійснюватися тільки по зсуву від одного з цих регістрів; покажчики і абсолютні адреси пам'яті не використовуються. Хоча JVM не вимагає наявності цих регістрів, в більшості реалізацій такі регістри (або схожі їм) є. Відсутність покажчиків для доступу до локальних змінних і констант не випадково. Це потрібно для досягнення однієї з головних цілей мови Java: можливості завантажувати двійкову програму з Інтернету і виконувати її, не побоюючись шпигунських програм або якого-небудь збою в машині, на якій це програма виконується. Якщо обмежити використання покажчиків, можна добитися високої безпеки. Нагадаємо, що жодна з областей пам'яті, визначених в машині IJVM, не може бути дуже великою. Об'єм області процедур може бути всього лише 64 Кбайт. Простір, займаний локальними змінними, не повинне перевищувати 64 Кбайт. Набір констант також обмежується 64 Кбайт. JVM характеризується тими ж обмеженнями з тієї ж причини: зсуви для індексування цих областей обмежуються 16 бітами. Область локальних змінних міняється з кожною процедурою, тому кожна процедура, що викликається, має власні 64 Кбайт для своїх локальних змінних. Так само певний набір констант розповсюджується тільки на певний клас, тому кожний з них має власні 64 Кбайт. Тут немає місця для зберігання великих масивів і динамічних структур даних, наприклад списків і дерев. Саме тому в JVM включається додаткова область пам'яті, так звана «купа», яка призначена для зберігання динамічних об'єктів, а також дуже крупних об'єктів. Коли компілятор Java сприймає наступний вираз: int a[]=new int[4096] він посилає сигнал розподільнику пам'яті, який визначає місце в пам'яті для «купи» і повертає їй покажчик. Таким чином, покажчики використовуються в JVM, але програмісти не можуть безпосередньо маніпулювати ними. Якщо в «купі» створюються все нові і нові структури даних, вона врешті-решт переповниться. Коли спеціальна система бачить, що «купа» майже заповнилася, вона викликає програму чищення пам'яті (складальник сміття), яка шукає непотрібні об'єкти в «купі». Для цього застосовується складний алгоритм. Непотрібні об'єкти відкидаються, щоб звільнити місце в «купі». Схема дії автоматичної програми чищення пам'яті повністю відрізняється від використання стека локальних змінних. Ці два методи знаходяться відносно доповнення; кожний з них має своє місце. JVM не містить регістрів загального призначення, які можуть завантажуватися або зберігатися під управлінням програми. Це машина із стековою організацією. Хоча для наших днів це незвично, така машина дає просту архітектуру команд, яку легко компілювати. Проте у машини із стековою організацією є один недолік: тут необхідна велика кількість звернень до пам'яті. Але, як ми бачили в розділі «Мікроархітектура процесора picojava II» розділу 4, при умілій розробці можна усунути велику частину з них шляхом згортання команд JVM. Більш того, оскільки дана архітектура дуже проста, її можна реалізувати в невеликому шматочку кремнію, залишивши велику частину простору мікросхеми вільною для кеш-пам'яті першого рівня, яка надалі скоротить число звернень до основної пам'яті. (Розмір кеш-пам'яті picojava II складає максимум 16 Кбайт + 16 Кбайт, оскільки основною метою було створення дешевої мікросхеми.)
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |