JazelleJazelle DBX (англ. Direct Bytecode eXecution, «безпосереднє виконання байткоду») — технологія, що дозволяє виконання інструкцій байт-коду Java на апаратному рівні. Реалізована у деяких процесорах архітектури ARM.[1] Пропрієтарні віртуальні машини Java, що підтримують Jazelle, виконують код Java апаратно, і лише для деяких складних чи рідко використовуваних інструкцій — програмно. Згідно з вимогою ARM, приблизно 95 % байт-коду типового програмного забезпечення виконувалися апаратно.[джерело?] Перша архітектура з підтримкою Jazelle — ARMv5TEJ[2], а перший дизайн процесора з цією технологією — ARM926EJ-S[3]. Наявність Jazelle позначається літерою «J» у назві архітектури чи процесора. Опублікувані специфікації є досить неповними, оскільки достатні лише для написання коду операційної системи яка може підтримувати JVM, використовуючи Jazelle. Проголошена мета полягає в тому, що тільки JVM повинно (або може) залежати від деталей апаратного інтерфейсу. Цей тісний зв'язок між JVM і апаратною складовою сприяє їх взаємному розвитку без шкоди для інших програм. По суті це надає ARM Ltd. значний контроль над тим, які саме Java-машинами здатні використовувати Jazelle. Одне з очевидних застосувань Jazelle — прискорення виконання програм для платформи Java ME. Технологія ThumbEE, що з'явилася у архітектурі ARMv7, може вважатися номінальним нащадком Jazelle. РеалізаціяРозширення Jazelle працює як двійковий транслятор, і реалізоване як додаткова стадія між вибіркою і декодуванням інструкції центрального процесора. Розпізнані байт-коди перетворюються в послідовності з однієї або більше інструкцій ARM. Режим Jazelle виконує апаратно найбільш поширені прості інструкції JVM, з метою суттєво збільшити швидкість інтерпретації. Серед іншого, це зменшує необхідність в компілюванні «на льоту» (just in time) та інших JVM технологій прискорення[4]. JVM інструкції, які не реалізовані на апаратному рівні Jazelle, призводять до виклику відповідних підпрограм у JVM. Детальна інформація не публікується. Перехід до режиму Jazelle здійснюється інструкцією Архітектура системи командНабір команд Jazelle документовано як байт-код Java. Разом з тим компанією ARM не було опубліковано подробиць з виконання цих команд. Наприклад, у документації, що надається з віртуальною машиною HotSpot, вказано: «Для того, щоб уникнути непорозумінь, заявляємо: дистрибуція програм, які містять код інструкції Співробітники ARM в минулому опублікували декілька «білих» документів (англ. white papers), що мали показати деякі аспекти розширень процесора. Довідник з архітектури ARM версії 2008 року містив псевдокод інструкції Двійковий програмний інтерфейс (ABI)Двійковий програмний інтерфейс (ABI) Jazelle, необхідний для коректної взаємодії з JVM, не опублікований ARM, в результаті чого Jazelle є незадокументованою функцією для більшості користувачів і відкритих реалізацій JVM. Стан віртуальної машини Jazelle знаходиться в межах звичайних регістрів ARM, що забезпечує сумісність з існуючими операційними системами і обробниками переривань і винятків. Перезапуск байт-коду (наприклад, після повернення з переривання) повторно виконує всю послідовність відповідних інструкцій ARM. Найважливіші складові стану JVM зберігаються у спеціальних регістрах: регістри Jazelle використовує той самий регістр адреси інструкції, що і решта режимів ARM ( Індикація режиму у регістрі CPSRРежим виконання байт-коду Java позначається поєднанням двох бітів у регістрі ARM CPSR (англ. Current Program Status Register — регістр поточного статусу програми). Біт Байт-код декодується апаратно в два етапи (у порівнянні з одним для Thumb та ARM коду). Перемикання між апаратним та програмним декодуванням (режим Jazelle і режим ARM) займає приблизно 4 такти процесора.[10]. Для входу у режим Jazelle, біт Інструкція |