Програми для Android інтерпретуються, а не компілюються. Це робить їх повільніше, ніж додатки для iOS під час виконання?
Програми для Android інтерпретуються, а не компілюються. Це робить їх повільніше, ніж додатки для iOS під час виконання?
Відповіді:
Java не інтерпретується на Android. Програми для Android складаються в байт-код розробником. Байт-код - це компактне представлення програми: менше, ніж вихідний код, написаний програмістом, але все ще не виконується безпосередньо процесором. На цьому етапі можуть бути зроблені деякі оптимізації, такі як видалення мертвого коду.
Коли ви завантажуєте додаток на пристрій, Dalvik JVM компілює байт-код до власного виконуваного коду так само, як він збирається запустити. Це просто своєчасна збірка. Це спричиняє коротке уповільнення, поки програма чекає її складання, але після цього не виникає накладних витрат, тому що код був зібраний у вихідний виконуваний код.
Є деякі переваги в продуктивності, якщо це зробити таким чином, а не складати на комп’ютері розробника. Додаток можна скласти для конкретного процесора на телефоні, скориставшись його апаратними можливостями та використовуючи його експлуатаційні характеристики. Наприклад, він може використовувати апаратні операції з плаваючою комою, якщо ЦП підтримує його. Крім того, розумний компілятор JIT (правда, Далвік не зовсім такий розумний) може стежити за тим, як працює програма, та проводити оптимізацію на основі способу використання програми в реальному використанні. Він може перекомпілювати код із кращим натяком на гілки, як тільки побачить, які варіанти включаються та вимикаються у вашому оточенні, на вашому телефоні. Передній компілятор не використовує цю інформацію.
Dalvik використовує кеш Dalvik та інші методи, щоб зменшити недоліки компіляції JIT. Новий JVM для Android L та новіших версій ART замінює JIT повністю компілятором заздалегідь . Це компілює байт-код до власного виконуваного коду, коли програма встановлена, щоб отримати більшість переваг JIT без затримки завантаження програми.
Не забувайте, що додатки для Android не повністю складаються з Java. Розробники мають NDK писати всі або частину своїх додатків на C або C ++ для критично важливих для роботи частин програми, особливо для ігор. Інтерфейси спеціального призначення, такі як OpenGL та Renderscript, дозволяють програмістам скористатися спеціальним обладнанням, таким як GPU та SIM-копроцесор для деяких видів обчислень.
Тож справді, простої відповіді на ваше запитання немає. Використання JIT замість передової компіляції робить деякі речі швидшими, а інші - повільнішими. Це лише одна частина загальної продуктивності ОС.
Оскільки це питання широке, ось широка відповідь.
"Чи швидше програми для iOS швидше, ніж для Android, оскільки інтерпретуються додатки для Android?"
По-перше, додатки для iOS не є швидшими, ніж для Android.
По-друге, щодо проблеми "Програми для Android тлумачать". Це те, що ви б сказали про обчислення, як, наприклад, "15 років тому": як видно з обговорення вище, ситуація сьогодні набагато складніша; абсолютно нові технології вийшли на перший план. Поняття "складено швидше, ніж інтерпретується!" Ви знаєте, порівнявши, знаєте, perl з машинним кодом 20 років тому; все змінилося настільки багато, що питання не може бути дійсно чітко застосовано до "iOS V Android" сьогодні.
По-третє, є інші проблеми в мобільному програмуванні, які повністю заглиблюють такі міркування. Лише один із прикладів, що програмують мобільні програмісти, які працюють над великими прокручуваними списками зображень, ледачим завантаженням тощо. Як обидві ОС, так і різні популярні бібліотеки вирішують ці найважливіші проблеми, часто переповнюють інші проблеми.
По-четверте, ще одна надзвичайна проблема щодо мобільних телефонів - це питання графічного чіпсету та різні складні взаємозв'язки, які стосуються програмного забезпечення, OpenGL тощо. Наприклад, Apple виходить із системою, яку вони називають "Метал" у зв'язку з цими проблемами, а Android виходить із власною "річчю" в цій галузі. Ці проблеми навколо графічного конвеєра надзвичайно важливі для того, як програми "почуваються" у вашій руці.
Дуже коротка відповідь на ваше запитання "складений В. інтерпретований" - це в основному застарілий дискусійний пункт, який ви знаєте?
(Крім того, я особливо не вважаю Note3 "повільнішим", ніж iPhone. Крім того, дещо з цього є чистим артефактом - існують недорогі телефони Android: просто не зроблено iPhone з низькою продуктивністю, тому деякі люди можуть мати неправильні ідеї з цього.)
Оскільки інтерпретовані програми не означають, що вони завжди повільні. Іноді вони більш потужні та динамічні порівняно зі складеним. Оскільки всі коди в компільованому додатку збираються один раз, а вихід зберігається у формі бібліотек або виконуваних файлів, тоді як на інтерпретованій мові можна один раз випадково змінити послідовність виконання. Тож я можу сказати, це залежить від розробника до розробника і є спосіб програмування.
Однак Java (мова програмування Android) не інтерпретується, а компілюється JIT. Це означає, що програми Android збираються безпосередньо перед їх запуском, даючи досить схожі показники з iOS 'Objective C.
З недавніх пір система Android ART заздалегідь збирає програми, тому вони запускаються так само, як програми iOS. Іншими словами, наступна версія Android, мабуть, буде настільки ж швидкою, як iOS.
Оновлення
Мови програмування, як правило, підпадають під одну з двох категорій: Складено або Інтерпретовано. За допомогою компільованої мови код, який ви вводите, зводиться до набору інструкцій, визначених для машини, перед тим як зберігати їх як виконуваний файл. З інтерпретованими мовами код зберігається у тому ж форматі, який ви ввели.Скомпільовані програми зазвичай працюють швидше, ніж інтерпретовані, оскільки інтерпретовані програми повинні бути зведені до машинних інструкцій під час виконання. Однак з інтерпретованою мовою ви можете робити речі, які неможливо зробити на компільованій мові. Наприклад, інтерпретовані програми можуть змінювати себе, додаючи або змінюючи функції під час виконання. Також зазвичай простіше розробляти програми в інтерпретованому середовищі, оскільки вам не доведеться перекомпілювати програму щоразу, коли ви хочете протестувати невеликий розділ.