Відкрити головне меню

Зміни

248 байтів додано, 2 роки тому
м
Під «незалежністю від архітектури» мається на увазі те, що програма, написана на мові Java, працюватиме на будь-якій підтримуваній апаратній чи системній платформі без змін у [[Початковий код|початковому коді]] та [[Компілятор|перекомпіляції]].
 
Цього можна досягти, компілюючи початковий Java код у [[байт-код]], який є спрощеними машинними командами. Потім програму можна виконати на будь-якій платформі, що має встановлену [[віртуальна машина|віртуальну машину]] Java, яка інтерпретує байткод у код, пристосований до специфіки конкретної [[операційна система|операційної системи]] і [[Центральний процесор|процесора]]. Зараз віртуальні машини Java існують для більшості процесорів і операційних систем.
 
Стандартні бібліотеки забезпечують загальний спосіб доступу до таких платформозалежних особливостей, як обробка [[Комп'ютерна графіка|графіки]], [[Багатонитевість|багатопотоковість]] та роботу з [[Комп'ютерна мережа|мережами]]. У деяких версіях задля збільшення продуктивності JVM байт-код можна компілювати у машинний код до або під час виконання програми.
 
Основна перевага використання [[байт-код]]у — це портативність. Тим не менш, додаткові витрати на інтерпретацію означають, що інтерпретовані програми будуть майже завжди працювати повільніше, ніж скомпільовані у машинний код, і саме тому Java одержала репутацію «повільної»{{fact}} мови. Проте, цей розрив суттєво скоротився після введення декількох методів оптимізації у сучасних реалізаціях JVM.
 
Одним із таких методів є компіляція {{lang[[JIT-en2компіляція|just-in-time}} компіляція]] (JIT, що перетворює байт-код Java у машинний під час першого запуску програми, а потім кешує його. У результаті така програма запускається і виконується швидше, ніж простий інтерпретований код, але ціною додаткових витрат на компіляцію під час виконання. Складніші віртуальні машини також використовують динамічну рекомпіляцію, яка полягає в тому, що В.віртуальна М.машина аналізує поведінку запущеної програми й вибірково рекомпілює та оптимізує певні її частини. З використанням динамічної рекомпіляції можна досягти більшого рівня оптимізації, ніж за статичної компіляції, оскільки динамічний компілятор може робити оптимізації на базі знань про довкілля періоду виконання та про [[Java Classloader|завантажені]] класи. До того ж він може виявляти так звані гарячі точки ({{lang-en|hot spots}}) —- частини програми, найчастіше внутрішні цикли, які займають найбільше часу при виконанні. JIT-компіляція та динамічна рекомпіляція збільшує швидкість Java-програм, не втрачаючи при цьому портативності.
 
Існує ще одна технологія оптимізації байткоду, широко відома як статична компіляція, або компіляція {{lang-en2|ahead-of-time}} (AOT). Цей метод передбачає, як і традиційні компілятори, безпосередню компіляцію у машинний код. Це забезпечує хороші показники в порівнянні з інтерпретацією, але за рахунок втрати переносності: скомпільовану таким способом програму можна запустити тільки на одній, цільовій платформі.
34 566

редагувань