Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические материалы СПтаОС (3курс).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
930 Кб
Скачать
☆

1.3. Вступ до мови програмування Java

1.3.1. Виконання Java-програми

Як ви знаєте, програма, написана на одній з мов високого рівня, до яких відноситься і мова Java, так званий початковий модуль ("исходнік" або "сирець" на жаргоні, від англійського "source"), не може бути відразу ж виконана. Її спочатку треба відкомпілювати, тобто перевести в послідовність машинних команд — об'єктний модуль. Але і він, як правило, не може бути відразу ж виконаний: об'єктний модуль треба ще скомпоновать з бібліотеками використаних в модулі функцій і вирішити перехресні посилання між секціями об'єктного модуля, отримавши в результаті завантажувальний модуль — повністю готову до виконання програму.

Початковий модуль, написаний на Java, не може уникнути цих процедур, але тут виявляється головна особливість технології Java — програма компілюється відразу в машинні команди, але не команди якогось конкретного процесора, а в команди так званої віртуальної машини Java (JVM, Java Virtual Machine). Віртуальна машина Java — це сукупність команд разом з системою їх виконання. Команди JVM короткі, більшість з них має довжину 1 байт, чому команди JVM називають байт-кодами (bytecodes), хоча є команди завдовжки 2 і 3 байти. Згідно статистичним дослідженням середня довжина команди складає 1,8 байта. Повний опис команд і всієї архітектури JVM міститься в специфікації віртуальної машини Java (VMS, Virtual Machine Specification). Якщо ви хочете в точності дізнатися, як працює віртуальна машина Java, ознайомтеся з цією специфікацією.

Інша особливість Java — всі стандартні функції, що викликаються в програмі, підключаються до неї тільки на етапі виконання, а не включаються в байт-коды. Як говорять фахівці, відбувається динамічна компоновка (dynamic binding). Це теж сильно зменшує об'єм програми, що відкомпілювалася.

Отже, на першому етапі програма, написана на мові Java, переводиться компілятором в байт-коды. Ця компіляція не залежить від типу якого-небудь конкретного процесора і архітектури якогось конкретного комп'ютера. Вона може бути виконана один раз відразу ж після написання програми. Байт-коди записуються в одному або декількох файлах, можуть зберігатися в зовнішній пам'яті або передаватися по мережі. Це особливо зручно завдяки невеликому розміру файлів з байт-кодами. Потім отримані в результаті компіляції байт-коды можна виконувати на будь-якому комп'ютері, що має систему, реалізовуючу JVM. При цьому не важливий ні тип процесора, ні архітектура комп'ютера. Так реалізується принцип Java "Write once, run anywhere" — "Написано одного разу, виконується де завгодно".

Інтерпретація байт-кодов і динамічна компоновка значно уповільнюють виконання програм. Це не має значення в тих ситуаціях, коли байт-коды передаються по мережі, мережа все одно повільніше за будь-яку інтерпретацію, але в інших ситуаціях потрібний могутній і швидкий комп'ютер. Тому постійно йде удосконалення інтерпретаторів у бік збільшення швидкості інтерпретації. Розроблені JIT -компиляторы (Just-In-Time), інтерпретовані ділянки коди, що запам'ятовують вже, в машинних командах процесора і що просто виконують ці ділянки при повторному зверненні, наприклад, в циклах. Це значно збільшує швидкість обчислень, що повторюються. Фірма SUN розробила цілу технологію Hot-Spot і включає її в свою віртуальну машину Java. Але, звичайно, найбільшу швидкість може дати тільки спеціалізований процесор.

Фірма SUN Microsystems випустила мікропроцесори PicoJava, що працюють на системі команд JVM, і збирається випускати цілу лінійку все більш могутніх Java-процесорів. Є вже і Java-процесори інших фірм. Ці процесори безпосередньо виконують байт-коди. Але при виконанні програм Java на інших процесорах потрібна ще інтерпретація команд JVM в команди конкретного процесора, а значить, потрібна програма-інтерпретатор, причому для кожного типу процесорів, і для кожної архітектури комп'ютера слід написати свій інтерпретатор.

Це завдання вже вирішене практично для всіх комп'ютерних платформ. На них реалізовані віртуальні машини Java, а для найбільш поширених платформ є декілька реалізацій JVM різних фірм. Все більше операційних систем і систем управління базами даних включають реалізацію JVM в своє ядро. Створена і спеціальна операційна система JAVAOS, вживана в електронних пристроях. У більшість браузеров вбудована віртуальна машина Java для виконання аплетів.

Уважний читач вже відмітив, що окрім реалізації JVM для виконання байт-кодів на комп'ютері ще потрібно мати набір функцій, що викликаються з байт-кодів і динамічно компонуються з байт-кодами. Цей набір оформляється у вигляді бібліотеки класів Java, що складається з одного або декількох пакетів. Кожна функція може бути записана байт-кодами, але, оскільки вона зберігатиметься на конкретному комп'ютері, її можна записати прямо в системі команд цього комп'ютера, избегнув тим самим інтерпретації байт-кодов. Такі функції називають "рідними" методами (native methods). Застосування "рідних" методів прискорює виконання програми.

Фірма SUN Microsystems — творець технології Java — безкоштовно поширює набір необхідних програмних інструментів для повного циклу роботи з цією мовою програмування: компіляції, інтерпретації, відладки, що включає і багату бібліотеку класів, під назвою JDK (Java Development Kit). Є набори інструментальних програм і інших фірм. Наприклад, великою популярністю користується JDK фірми IBM.