JIT-компіляція

Just-in-time compilation (JIT) (також відома як dynamic translation або run-time compilation)[1] — компіляція «на льоту» — це технологія збільшення продуктивності програмних систем, що виконують програмний код, шляхом трансляції байт-коду в машинний код безпосередньо під час роботи програми. У такий спосіб досягається висока швидкість виконання за рахунок збільшення споживання пам'яті (для зберігання результатів компіляції) і витрат часу на компіляцію.

JIT компіляція є комбінацією двох основних методів трансляції в машинний код, інтерпретації та статичної компіляції, та наслідує якості обох підходів: переваги швидкості скомпільованого коду та гнучкості інтерпретатора поєднані з накладними витратами інтерпретації та компіляції коду. JIT-компіляція є підвидом динамічної компіляції що дозволяє використання технік адаптивної оптимізації, таких як динамічна рекомпіляція, використання інтерпретатором мікроархітектурних оптимізацій.[2] JIT-компіляція підходить для динамічних мов програмування, оскільки системи компіляції реального часу можуть сконструювати пізньо-зв'язуванні типи даних та гарантувати безпеку.

Застосування

JIT-компіляція може бути використана у окремих програмах, або для реалізації певного динамічного функціоналу, такого як регулярні вирази. Для прикладу, редактор може скомпілювати регулярний вираз, який був введений під час роботи програми, у швидкий машинний код — цю компіляцію неможливо провести завчасно, оскільки шаблон регулярного виразу вводиться під час виконання. Деякі сучасні середовища виконання покладаються на JIT-компіляцію для підвищення швидкості роботи коду. Прикладами таких середовищ є більшість імплементацій Java та .NET Framework. Схожим чином, багато бібліотек використовують JIT-компіляцію для трансляції регулярних виразів у необхідний байт- або машинний код. JIT компіляція також використовується в деяких емуляторах, з метою трансляції машинного коду процесорів однієї архітектури до машинного коду процесора іншої архітектури.

Звичний JIT-компілятор виконує статичну компіляцію перед виконанням, отримуючи байткод (код віртуальної машини), відомий також як байткод компіляція, а після — виконує компіляцію в машинний код (динамічна компіляція, або JIT-компіляція), замість простого процесу інтерпретації байткоду в машинний код. Це дозволяє покращити швидкість виконання коду (порівняно з інтерпретацією), ціною втрати часу на компіляцію. Трансляція коду JIT-компілятором, так само як і інтерпретатором, є безперервним процесом, проте кешування скомпільованого коду зменшує затримку подальшого виконання повторно використаного коду. Оскільки в цьому випадку компілюється тільки частина програми, затримка на компіляцію перед виконанням є меншою, ніж час компіляції всієї програми.

Історія розвитку JIT-компіляції, її основних підходів

Найпершим опублікованим JIT-компілятором вважається робота Джона Маккарті над LISP у 1960.[3] В його статті «Recursive functions of symbolic expressions and their computation by machine, Part I» (англ. Рекурсивні функції символічних виразів та їхнє обчислення машинами, Частина 1), він згадує функції, що транслюються під час роботи програми, уникаючи необхідності збереження вихідного коду компілятора на перфокартах.[3] (кращим терміном для описаної системи буде «Система компіляції та запуску» (англ. compile and go system). Іншим раннім застосуванням JIT-компіляції є робота Кена Томпсона, шаблонований пошук текстового редактора QED, в якому використовувалась JIT-компіляція регулярних виразів у машинний код IBM 7094, під керівництвом ОС Compatible Time-Sharing System.[3] Великий вплив мав спосіб отримання машинного коду через інтерпретацію, який був використаний у імплементації експериментальної мови програмування LC² компанією Mitchell у 1970 році.[4][5]

Мова Smalltalk містила в собі новаторські аспекти JIT-компіляції. Наприклад, трансляція машинного коду виконувалась за потребою, а результат компіляції кешувався для подальшого використання. У випадку нестачі пам'яті, система видаляла видаляла частинки цього коду та відновлювала новою компіляцією за потреби.[6][7] Мова Self, «діалект» мови Smalltalk що був розроблений компанією Sun, розвинула ці техніки та певний час була найшвидшою з сімейства Smalltalk, досягаючи половини швидкості оптимізованого коду на C[8], будучи повністю об'єктно-орієнтованою мовою.

Згодом Sun припинили активну розробку Self, однак використали отриманий досвід у мові Java. Термін «Just-in-time компіляція» був запозичений з виробничого терміну «Just in time» та набув популярності у Java — Джеймс Гослінг використовував цей термін з 1993.[9] Зараз JIT-компіляція використовується більшістю імплементацій віртуальної машини Java, оскільки HotSpot бере за основу та активно використовує цю технологію.

Проєкт Dynamo[10] компанії HP був експериментальним JIT-компілятором, в якому формат байткоду відповідав машинному коду, система переводила машинний код PA-6000 у машинний код PA-8000. Це призвело до збільшення швидкодії, у деяких випадках до 30 %, оскільки відкрило можливість використовувати оптимізації на рівні машинного коду, наприклад, вбудовування коду для кращого використання кеш-пам'яті, оптимізації викликів динамічних бібліотек та інші, що доступні тільки під час безпосереднього виконання, що робить їх проблематичними для використання звичайними компіляторами.[11][12]

30 березня 2019 року було анонсовано, що PHP 8 отримає JIT-компіляцію[13] у 2021 році.[14]

Питання безпеки

JIT-компіляція вимагає більшої уваги до питань безпеки та несе підвищені ризики, оскільки має на меті виконання автогенерованого машинного коду. Скомпільований код зберігається в пам'ять та одразу виконується.

Цей процес відрізняється від виконання заздалегідь скомпільованого машинного коду тим, що у випадку JIT-компіляції процесор має виконувати код з загальної ділянки пам'яті. Це суперечить ідеї захисту виконавчої ділянки пам'яті, за якої виконання машинного коду має бути дозволене тільки з спеціально відмічених ділянок пам'яті, та навпаки — виконання коду з загальної пам'яті заборонене, оскільки це є слабким місцем захисту від зовнішніх втручань. З цієї причини, сегменти пам'яті з кодом, який був скомпільований на льоту, мають бути відмічені як виконавчі сегменти. З міркувань безпеки, виконавча помітка має бути виставлена після запису коду в пам'ять та виставлення помітки тільки для читання (read-only), оскільки одночасний дозвіл на запис та виконання сегменту пам'яті є потенційною небезпекою (див. W^X).[15] Для прикладу, Javascript JIT-компілятор Firefox'а отримав таку імплементацію у версії Firefox 46.[16]

JIT spraying є підвидом експлойта, що використовує JIT-компіляцію як елемент heap spraying атаки, що дозволяє обійти ASLR та захист виконавчого простору, заповнивши купу виконавчим кодом.[17]

Див. також

Примітки

  1. Languages, Compilers, & Runtime Systems | Computer Science and Engineering at Michigan. Computer Science and Engineering (амер.). Архів оригіналу за 28 жовтня 2020. Процитовано 3 жовтня 2020.
  2. kexugit. Does the JIT take advantage of my CPU?. docs.microsoft.com (амер.). Архів оригіналу за 19 липня 2020. Процитовано 4 жовтня 2020.
  3. а б в Aycock, 2003, 2. JIT Compilation Techniques, 2.1 Genesis, p. 98.
  4. Aycock, 2003, 2. JIT Compilation Techniques, 2.2 LC², p. 98–99.
  5. Mitchell, J.G. (1970). The design and construction of flexible and efficient interactive programming systems.
  6. Aycock, 2003.
  7. Deutsch, L.P.; Schiffman, A.M. (1984). Efficient implementation of the Smalltalk-80 system (PDF). POPL '84: Proceedings of the 11th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages: 297—302. doi:10.1145/800017.800542. ISBN 0-89791-125-3. Архів оригіналу (PDF) за 18 червня 2004. [Архівовано 2004-06-18 у Wayback Machine.]
  8. [1] [Архівовано 24 листопада 2006 у Wayback Machine.]
  9. Aycock, 2003, 2.14 Java, p. 107, footnote 13.
  10. «Dynamo: A Transparent Dynamic Optimization System» [Архівовано 2 червня 2012 у Wayback Machine.] Vasanth Bala, Evelyn Duesterwald, Sanjeev Banerjia — PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation — pages 1 to 12 — DOI:10.1145/349299.349303. Retrieved March 28, 2012
  11. John Jannotti. HP's Dynamo - Page 1 - (3/2000). Ars Technica. Архів оригіналу за 5 лютого 2012. Процитовано 5 липня 2013.
  12. The HP Dynamo Project. Архів оригіналу за 19 жовтня 2002. Процитовано 12 квітня 2016.{{cite web}}: Обслуговування CS1:Сторінки з посиланнями на джерела, що мають непридатні URL (посилання) [Архівовано 2002-10-19 у Wayback Machine.]
  13. PHP Gr8. Архів оригіналу за 23 лютого 2020. Процитовано 16 жовтня 2020.
  14. PHP 8 and 7.4 to come with Just-in-time (JIT) to make most CPU-intensive workloads run significantly faster. April 2019. Архів оригіналу за 7 жовтня 2020. Процитовано 16 жовтня 2020.
  15. «How to JIT — an introduction [Архівовано 17 березня 2019 у Wayback Machine.]», Eli Bendersky, November 5th, 2013 at 5:59 am
  16. De Mooij, Jan. W^X JIT-код у Firefox. Jan De Mooij. Архів оригіналу за 14 травня 2016. Процитовано 11 травня 2016.
  17. Jürgen Schmidt (20 січня 2011). Return of the sprayer -- JIT Spraying: Exploits to beat DEP and ASLR. The H. Архів оригіналу за 23 січня 2011. Процитовано 22 січня 2011.

Джерела


Read other articles:

Letak Hoorn di Noord Holland Hoorn adalah sebuah gemeente Belanda yang terletak di provinsi Noord Holland. Pada tahun 2005, daerah ini memiliki penduduk sebesar 68.808 jiwa. Sebuah patung Jan Pieterszoon Coen terletak di Roode Steen di pusat kota Hoorn. Lihat pula Daftar kota di Belanda Pranala luar (Belanda) Hoorngids.nl lbsMunisipalitas di provinsi Holland Utara Aalsmeer Alkmaar Amstelveen Amsterdam Bergen Beverwijk Blaricum Bloemendaal Castricum Den Helder Diemen Dijk en Waard Drechterland...

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Februari 2023. China Precision Machinery Import-Export Corporation (CPMIEC, Cina: 中国 精密 机械 进出口 总公司) adalah perusahaan pertahanan China yang bertindak sebagai salah satu dari sejumlah perusahaan perdagangan pertahanan resmi. Perusahaan ini mew...

 

Pour les articles homonymes, voir Corrientes. Province de Corrientes Provincia de Corrientes Héraldique Drapeau Localisation de la province de Corrientes Administration Pays Argentine Capitale Corrientes Gouverneur Gustavo Valdés (en) (UCR) ISO 3166-2 AR-W Démographie Gentilé Correntino/a Population 1 070 283 hab. (2015) Densité 12 hab./km2 Géographie Coordonnées 29° sud, 58° ouest Superficie 88 199 km2 Liens Site web http://www.corriente...

State Forest in Washington County, Wisconsin Loew Lake Unit, Kettle Moraine State ForestIUCN category V (protected landscape/seascape)The Ice Age Trail passes through the Loew Lake unitShow map of WisconsinShow map of the United StatesLocationWashington, Wisconsin, United StatesCoordinates43°13′7″N 88°18′52″W / 43.21861°N 88.31444°W / 43.21861; -88.31444Area1,090 acres (4.4 km2)Established1987Governing bodyWisconsin Department of Natural Resources...

 

Patrick Ekeng Ekeng saat bermain untuk Lausanne-Sport pada 2014.Informasi pribadiNama lengkap Patrick Claude Ekeng EkengTanggal lahir (1990-03-26)26 Maret 1990Tempat lahir Yaoundé, KamerunTanggal meninggal 6 Mei 2016(2016-05-06) (umur 26)Tempat meninggal Bucharest, RumaniaTinggi 1,80 m (5 ft 11 in)Posisi bermain Gelandang bertahanKarier junior2006–2008 Canon YaoundéKarier senior*Tahun Tim Tampil (Gol)2008–2009 Canon Yaoundé 29 (7)2009–2013 Le Mans 35 (1)2011 → ...

 

Boxing competition Rocky Marciano vs. Jersey Joe WalcottDateSeptember 23, 1952 and May 15, 1953VenuePhiladelphia Municipal Stadium and Chicago StadiumTitle(s) on the lineNYSAC, NBA, and The Ring heavyweight titlesTale of the tapeBoxer Rocky Marciano Jersey Joe WalcottNickname The Brockton Blockbuster Jersey JoeHometown Brockton, Massachusetts Pennsauken Township, New JerseyPre-fight record 42-0 (37 KO) 49-18-1 (31 KO)Height 5 ft 10 in (178 cm) 6 ft (183 cm)Weight 185&...

Gerhard Ludwig Müller, OESSHPrefek Kongregasi bagi Doktrin ImanKardinal Gerhard Ludwig MüllerGerejaSant'Agnese in AgonePenunjukan2 Juli 2012PendahuluWilliam Joseph Cardinal LevadaJabatan lainKardinal-Deakon Sant’Agnese in AgonePresiden Komisi Kepausan Ecclesia DeiPresiden Komisi Teologi InternasionalPresiden Komisi Biblikal KepausanImamatTahbisan imam11 Februari 1978oleh Kardinal Hermann VolkTahbisan uskup24 November 2002oleh Friedrich WetterPelantikan kardinal22 Februari 2014ol...

 

Nama ini menggunakan cara penamaan Spanyol: nama keluarga pertama atau paternalnya adalah Vega dan nama keluarga kedua atau maternalnya adalah Dieppa. Paulina VegaLahirPaulina Vega Dieppa15 Januari 1993 (umur 31)Barranquilla, KolombiaTempat tinggalBogota, KolombiaNama lainPaulina VegaTinggi175 cm (5 ft 9 in)Gelar Miss Atlántico 2013 Miss Colombia 2013 Miss Universe 2014 Pemenang kontes kecantikanWarna rambutCokelatWarna mataCoklatKompetisiutama Miss Atlántico 2...

 

American politician Alfred H. ColquittUnited States Senatorfrom GeorgiaIn officeMarch 4, 1883 – March 26, 1894Preceded byMiddleton P. BarrowSucceeded byPatrick Walsh49th Governor of GeorgiaIn officeJanuary 12, 1877 – November 4, 1882Preceded byJames M. SmithSucceeded byAlexander H. StephensMember of the U.S. House of Representativesfrom Georgia's 2nd districtIn officeMarch 4, 1853 – March 3, 1855Preceded byJames JohnsonSucceeded byMartin J. Crawfor...

Geographic region in the Southern US Not to be confused with Southern Uplands. The Upland South is defined by landform, history, and culture, and does not correspond well to state lines. This map shows the approximate region known as the Upland South. The Upland South and Upper South are two overlapping cultural and geographic subregions in the inland part of the Southern United States. They differ from the Deep South and Atlantic coastal plain by terrain, history, economics, demographics, an...

 

British politician Assheton Pownall Lieutenant-Colonel Sir Assheton Pownall OBE TD DL (3 October 1877 – 29 October 1953) was a British Conservative Party politician who served as Member of Parliament for Lewisham East from 1918 to 1945.[1] Pownall was born in Warwick, Warwickshire, the son of civil engineer Charles Assheton Whately Pownall and Dora Bourne Royds. He was the grandson of the Ven. Assheton Pownall, Archdeacon of Leicester. Pownall was educated at Rugby School.&#...

 

19th and 20th-century settlement house in the United States For other uses, see Hull House (disambiguation). This article has an unclear citation style. The references used may be made clearer with a different or consistent style of citation and footnoting. (December 2023) (Learn how and when to remove this message) United States historic placeHull HouseU.S. National Register of Historic PlacesU.S. National Historic LandmarkChicago Landmark Hull House in the early 20th centuryLocation800 S. H...

American economist, physicist, legal scholar, author, and libertarian theorist (born 1945) For other people with the same name, see David Friedman.This article may rely excessively on sources too closely associated with the subject, potentially preventing the article from being verifiable and neutral. Please help improve it by replacing them with more appropriate citations to reliable, independent, third-party sources. (January 2024) (Learn how and when to remove this message) David D. Friedm...

 

Chilean bolero singer This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Lucho Gatica – news · newspapers · books · scholar · JSTOR (May 2010) (Learn how and ...

 

В легендариуме Джона Р. Р. Толкина описывается значительное количество артефактов — предметов искусственного происхождения, сотворённых мастерами из числа Валар, детей Илуватара (эльфы и люди), гномов, а также Врагами (Моргот и Саурон). Ниже приведён список наибо...

Election in Ohio Main article: 1900 United States presidential election 1900 United States presidential election in Ohio ← 1896 November 6, 1900 1904 →   Nominee William McKinley William Jennings Bryan Party Republican Democratic Home state Ohio Nebraska Running mate Theodore Roosevelt Adlai Stevenson I Electoral vote 23 0 Popular vote 543,918 474,882 Percentage 52.30% 45.66% County Results McKinley   40-50%   50-60%  ...

 

Cet article est une ébauche concernant l’astronautique. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Pour les articles homonymes, voir Graves. GRAVES (système) Données clés Pays d'origine France Mise en opération 2005 Quantité produite 1 Type Surveillance spatiale Portée 1 000 km ~ modifier Site de réception du radar de GRAVES, sur le plateau d'Albion, au Revest-du-Bion GRAVES (Grand Rése...

 

Bilateral relationsAzerbaijani–Dutch relations Azerbaijan Netherlands Diplomatic missionEmbassy of Azerbaijan, The HagueEmbassy of the Netherlands, Baku Diplomatic relations exist between Azerbaijan and the Netherlands. Azerbaijan have an embassy in The Hague. the Netherlands has an embassy in Baku. Both countries are full members of the COE. Azerbaijan celebrated its 30th anniversary with the Netherlands on April 1, 2022. History Dutch Prime Minister Mark Rutte meet with Azerbaijani Presid...

Vegetable pie Woolton pie Woolton pie is a pastry dish of vegetables, widely served in Britain in the Second World War when rationing and shortages made other dishes hard to prepare. The recipe was created by François Latry,[1] Maître Chef des Cuisines at the Savoy Hotel in London,[2][3] and appeared on the Savoy menu as Le Lord Woolton Pie.[4] It was one of a number of recipes commended to the British public by the Ministry of Food to enable a nutritious die...

 

Cet article est une ébauche concernant un groupe ethnique marocain. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Beni Meskine (arabe : بني مسكين) est une tribu Árabe dont le territoire est situé dans la région administrative de Casablanca-Settat au Maroc, autour de la commune d'El Borouj. (fr) Béni Meskine (ar) بني مسكينal-Meskini Bannière contemporain des Béni Meskine. Ethnie Arab...