Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Нативный ΠΊΠΎΠ΄

ΠœΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ΡΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ собствСнный ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ β€” ΠΎΡ‚ Π°Π½Π³Π». native code ) β€” систСма ΠΊΠΎΠΌΠ°Π½Π΄ (язык) ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ (ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ интСрпрСтируСтся нСпосрСдствСнно микропроцСссором ΠΈΠ»ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ Π΄Π°Π½Π½ΠΎΠΉ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

КаТдая модСль процСссора ΠΈΠΌΠ΅Π΅Ρ‚ свой собствСнный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык, хотя Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… модСлях эти Π½Π°Π±ΠΎΡ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄ сильно ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ. Говорят, Ρ‡Ρ‚ΠΎ процСссор A совмСстим с процСссором B, Ссли процСссор A ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Β«ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Β» ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ процСссора B. Если процСссор A Π·Π½Π°Π΅Ρ‚ нСсколько ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ процСссор B, Ρ‚ΠΎ B нСсовмСстим с A.

Β«Π‘Π»ΠΎΠ²Π°Β» машинного языка Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌΠΈ инструкциями. КаТдая ΠΈΠ· Π½ΠΈΡ… описываСт элСмСнтарноС дСйствиС, выполняСмоС процСссором, Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ°ΠΊ Β«ΠΏΠ΅Ρ€Π΅ΡΠ»Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚ ΠΈΠ· памяти Π² рСгистр». ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° β€” это просто Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ список инструкций, выполняСмых процСссором. РаньшС процСссоры просто выполняли инструкции ΠΎΠ΄Π½Ρƒ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Π½ΠΎ Π½ΠΎΠ²Ρ‹Π΅ супСрскалярныС процСссоры способны Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСсколько инструкций Π·Π° Ρ€Π°Π·. ΠŸΡ€ΡΠΌΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½ инструкциСй ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°, которая пСрСносит Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ адрСсом. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ условной, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ соблюдСнии Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ условия.

Π’Π°ΠΊΠΆΠ΅ инструкции Π±Ρ‹Π²Π°ΡŽΡ‚ постоянной Π΄Π»ΠΈΠ½Ρ‹ (Ρƒ MISC-Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€) ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π½ΠΎΠΉ (Ρƒ x86 ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ ΠΎΡ‚ 8 Π΄ΠΎ 120 Π±ΠΈΡ‚ΠΎΠ²).

Π‘ΠΌ Ρ‚Π°ΠΊΠΆΠ΅

ПолСзноС

Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «ΠΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄» Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… словарях:

Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ β€” Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎ систСмС ΠΊΠΎΠΌΠ°Π½Π΄ Π² Ρ†Π΅Π»ΠΎΠΌ; ΠΎΠ± инструкциях см.: Код ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ°). ΠœΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ΡΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ собствСнный ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΡ‚ Π°Π½Π³Π». native code) систСма… … ВикипСдия

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ β€” Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎ систСмС ΠΊΠΎΠΌΠ°Π½Π΄ Π² Ρ†Π΅Π»ΠΎΠΌ; ΠΎΠ± инструкциях см.: Код ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ°). ΠœΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ΡΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ собствСнный ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΡ‚ Π°Π½Π³Π». native code) систСма… … ВикипСдия

Π ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄ β€” Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎ систСмС ΠΊΠΎΠΌΠ°Π½Π΄ Π² Ρ†Π΅Π»ΠΎΠΌ; ΠΎΠ± инструкциях см.: Код ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ°). ΠœΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ΡΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ собствСнный ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΡ‚ Π°Π½Π³Π». native code) систСма… … ВикипСдия

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ языков программирования β€” Π­Ρ‚Ρƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ слСдуСт Π²ΠΈΠΊΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚Π΅ Π΅Ρ‘ согласно ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ оформлСния статСй. УсловныС обозначСния … ВикипСдия

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык программирования β€” язык программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ прСобразовываСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для нСпосрСдствСнного выполнСния Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ процСссором (ΠΊΠ°ΠΊ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языках), Π° исполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. В… … ВикипСдия

Машинная инструкция β€” Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎ систСмС ΠΊΠΎΠΌΠ°Π½Π΄ Π² Ρ†Π΅Π»ΠΎΠΌ; ΠΎΠ± инструкциях см.: Код ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ°). ΠœΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ΡΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ собствСнный ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΡ‚ Π°Π½Π³Π». native code) систСма… … ВикипСдия

ΠœΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык β€” Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎ систСмС ΠΊΠΎΠΌΠ°Π½Π΄ Π² Ρ†Π΅Π»ΠΎΠΌ; ΠΎΠ± инструкциях см.: Код ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ°). ΠœΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ΡΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ собствСнный ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΡ‚ Π°Π½Π³Π». native code) систСма… … ВикипСдия

Мобильная ΠΈΠ³Ρ€Π° β€” Π§Π°ΡΡ‚ΡŒ сСрии … ВикипСдия

OCaml β€” Objective Caml Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ°: ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅Π½Π½Ρ‹ΠΉ: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ, ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Автор(Ρ‹): INRIA Π Π΅Π»ΠΈΠ·: 4.00.1 (5 октября … ВикипСдия

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Мобильная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: Cross-platform ΠΈΠ»ΠΈ Native

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! Π― Π˜Π³ΠΎΡ€ΡŒ Π’Π΅Π΄Π΅Π½Π΅Π΅Π², Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² AGIMA. ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΈ кроссплатформСнной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. РаньшС я ΠΏΠΎ большСй части скСптичСски относился ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ: Π½Π΅ устраивало качСство ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Однако Π·Π° послСдний Π³ΠΎΠ΄ Ρ‚Π΅ΠΌΠΏΡ‹ развития кроссплатформСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² ΡƒΠΆΠ΅ Π½Π΅ Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ своС ΠΌΠ½Π΅Π½ΠΈΠ΅ насчСт Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΅Ρ‰Π΅ Ρ€Π°Π· сравним самыС популярныС кроссплатформСнныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

На всякий случай

Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нативная ΠΈ кроссплатформСнная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°:

нативная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (2 нСзависимых прилоТСния Π½Π° языках Swift ΠΈ Kotlin);

кроссплатформСнная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° β€” общая кодовая Π±Π°Π·Π° для iOS ΠΈ Android (с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² Flutter ΠΈΠ»ΠΈ React Native (Π΄Π°Π»Π΅Π΅ RN)).

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ способа Π΅ΡΡ‚ΡŒ свои особСнности, ΠΏΠ»ΡŽΡΡ‹ ΠΈ минусы. БоотвСтствСнно, ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Ρ†Π΅Π»ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…. БСйчас объясню, ΠΊΠ°ΠΊ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.

Нативная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

Нативная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° β€” это классичСский способ создания прилоТСния для iOS ΠΈ Android. ВСдСтся ΠΎΠ½Π° с использованиСм инструмСнтов ΠΈ языков программирования, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Π΅Π½Π΄ΠΎΡ€Π°ΠΌΠΈ β€” Apple ΠΈ Google. Π―Π·Ρ‹ΠΊΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС β€” Swift (iOS) ΠΈ Kotlin (Android), Π° инструмСнтов для профилирования ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π² Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ.

Однако ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ Π΄Π²Π° нСзависимых прилоТСния. Π Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. КаТдоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΡ‡Ρƒ ΠΏΠΎ-своСму, ΠΈ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ свои Π±Π°Π³ΠΈ. И самоС Π³Π»Π°Π²Π½ΠΎΠ΅, нативная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ дСнСтся: ΠΏΠΎΠΊΠ° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ iOS ΠΈ Android, Apple ΠΈ Google Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ инструмСнтарий для создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Нативная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ самоС качСствСнноС ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π²Π·Π°ΠΌΠ΅Π½ придСтся Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ всё 2 Ρ€Π°Π·Π° ΠΈ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ прилоТСния соотвСтствовали Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ.

Π‘Ρ€Π΅Π΄ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² это ΠΏΠΎΠΊΠ° самый популярный способ создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ, Π² этом случаС ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ для кроссплатформы. Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈΠ·-Π·Π° количСства ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Ρ€Ρ‹Π½ΠΊΠ΅.

ΠŸΠ»ΡŽΡΡ‹ ΠΈ минусы Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

2 нСзависимых прилоТСния

Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ

МСньшС потрСбляСмых рСсурсов*

Π‘ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ инструмСнтарий для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π¨ΠΈΡ€ΠΎΠΊΠΈΠΉ Ρ€Ρ‹Π½ΠΎΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²

ΠšΡ€ΠΎΡΡΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Π°Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

ΠšΡ€ΠΎΡΡΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Π°Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ ΠΈ Π½Π° iOS, ΠΈ Π½Π° Android. Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, это всё Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ, запустив Π΅Π³ΠΎ, ΠΌΡ‹ сразу проваливаСмся Π² ΠΌΠΈΡ€ Flutter ΠΈΠ»ΠΈ RN, ΠΈ всё происходит ΡƒΠΆΠ΅ Ρ‚Π°ΠΌ. Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Flutter/RN ΠΈΠ΄Π΅Ρ‚ быстрСС. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π° счСт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ 1 ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ вмСсто 2-Ρ…, Π° Π΅Ρ‰Π΅ ΠΈ Π·Π° счСт ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² частности UI.

Но, ΡƒΠ²Ρ‹, Π½Π΅ всё Ρ‚Π°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠΎ: кроссплатформа ΠΈΠΌΠ΅Π΅Ρ‚ ряд ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ для своСго прилоТСния. React Native ΠΈ Flutter всё ΠΆΠ΅ сторонниС Open Source-Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π’ Π½ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ Π±Π°Π³ΠΈ. НовыС Ρ„ΠΈΡˆΠΊΠΈ iOS ΠΈ Android Ρ‚Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π½Π΅ Ρ‚Π°ΠΊ быстро, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ…. ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ².

Π’Π°ΠΊΠΆΠ΅, довольно часто придСтся ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° сторонниС Open Source-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ нСсСт Π² сСбС риски ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ вСрсии Flutter/RN. НС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ сущСствуСт Π² ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅, ΠΈ Ρ‚ΠΎΠ³Π΄Π° придСтся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ всё с нуля самому. Π’Π°ΠΊΠΆΠ΅ нСльзя Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для iOS-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° часы. Π­Ρ‚ΠΎ касаСтся ΠΈ Flutter, ΠΈ RN.

Π’ΠΎ Π΅ΡΡ‚ΡŒ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ„ΠΈΡ‡ придСтся Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ смСшСнию Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. Как ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΈ. Как максимум β€” ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² кроссплатформСнный ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Если Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ, это Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΈ Π²ΠΎ Flutter, ΠΈ Π² RN. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ, скаТСм, это Π½Π΅ Ρ‚ΠΎ, для Ρ‡Π΅Π³ΠΎ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ эти Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ. Π’Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ достаточно Ρ‚ΡΠΆΠ΅Π»ΡƒΡŽ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ срСду, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ кроссплатформСнныС прилоТСния Π±ΠΎΠ»Π΅Π΅ рСсурсоСмкими ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊ процСссору/ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²ΠΊΠ΅ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°.

Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠ΅ использованиС Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… возмоТностСй Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°, взаимодСйствия с ОБ, Ρ‚ΠΎ я Π±Ρ‹ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ кроссплатформу β€” Π΅ΡΡ‚ΡŒ риск, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ станСт ΠΎΡ‡Π΅Π½ΡŒ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ, ΠΈΠ»ΠΈ ΠΌΡ‹ упрСмся Π² ограничСния ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΈΠ»ΠΈ самого Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°. Π•Ρ‰Π΅ стоит ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎ Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ UI, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΈ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π΅ ΡΠ½ΠΈΠΆΠ°Ρ‚ΡŒ Π½Π° этом ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

На ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π½ΠΈΠΆΠ΅ прСдставлСны Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСста с простым списком с изобраТСниями: Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‡ΠΈΡΡ‚ΡƒΡŽ. Π”Π°, Π½Π° Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹Ρ… модСлях Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² Ρ€Π°Π·Π½ΠΈΡ†Π° Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊΠΎΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ, Π½ΠΎ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… тСстов Ρ‚ΡƒΡ‚.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Если ΠΏΡ€ΠΎΡ‰Π΅, Ρ‚ΠΎ кроссплатформа позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠ΅ сроки. Π›ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ-Π²ΠΈΡ‚Ρ€ΠΈΠ½ услуг ΠΈΠ»ΠΈ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² срСднСго/ΠΌΠ°Π»ΠΎΠ³ΠΎ объСма Π±Π΅Π· ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠ³ΠΎ использования ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… возмоТностСй. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΡΠ½ΡΡ‚ΡŒ Ρ„ΠΎΡ‚ΠΊΡƒ Π½Π° Π°Π²Π°Ρ‚Π°Ρ€ ΠΈΠ»ΠΈ ΠΎΡ‚ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ QR-ΠΊΠΎΠ΄ Π½Π΅ составит Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π½ΠΎ, Ссли Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.

ΠŸΠ»ΡŽΡΡ‹ ΠΈ минусы кроссплатформСнной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Натив ΠΈΠ»ΠΈ кроссплатформа? Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·Π±ΠΎΡ€ простым языком

НСмного Π·Π½Π°Π½ΠΈΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π½Π΅ ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ большС совмСстного контСкста. ΠŸΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π½ΡƒΠ΄ΠΎΠΉ.

SDK β€” software development kit β€” инструмСнтарий Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Говорят Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, β€” AppStore SDK β€” Π½Π°Π±ΠΎΡ€ инструмСнтов для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΈ подписок Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Или Android SDK β€” ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΡ… SDK для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ΄ всю ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ.

API β€” это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс, (тяТСло ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ простыми словами оказываСтся). Π ΡƒΠ»ΡŒ β€” физичСский интСрфСйс ΠΊ колёсам, ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ β€” ΠΊ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŽ, ΠΌΡ‹ Π΄Π΅Ρ€Π³Π°Π΅ΠΌ Π·Π° Π½ΠΈΡ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ°ΡˆΠΈΠ½Π΅Ρ€ΠΈΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ сдСлала для нас Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‡Π΅Ρ€Π΅Π· простой для восприятия интСрфСйс. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ интСрфСйсы β€” Π½Π°Π±ΠΎΡ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ программисты Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π±ΠΎΠ»Π΅Π΅ простыми дСйствиями.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сухой Ρ€Π°Π·Π±ΠΎΡ€ прСимущСств ΠΈ нСдостатков Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ β€” пустая Ρ‚Ρ€Π°Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π±ΡƒΠ΄Π΅ΠΌ чСстны, ΠΈΠ· любой Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠ°ΡˆΠΊΡƒ ΠΈ ΠΊΠΎΠ½Ρ„Π΅Ρ‚ΠΊΡƒ, вопрос лишь ΠΊΠ°ΠΊΠΎΠΉ Ρ†Π΅Π½ΠΎΠΉ, поэтому для развития осознанного понимания, Π·Π°ΠΉΠ΄Π΅ΠΌ Ρ‡ΡƒΡ‚ΡŒ ΠΈΠ·Π΄Π°Π»Π΅ΠΊΠ°.

Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ любого бизнСса, поТСлавшСго ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ для сСбя Π²ΠΎΠΆΠ΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π°ΠΉΡ‚ΠΈΡˆΠ΅Ρ‡ΠΊΡƒ, доступСн Ρ‡Π΅Ρ€Π΅Π· 3 окошка:

Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ Π½Π΅ рассматриваСм устройства носимой элСктроники, ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° Π²Π΅Ρ‰Π΅ΠΉ, экранов Ρ…ΠΎΠ»ΠΎΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊΠΎΠ², Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… embedded систСм β€” ΡƒΠΆ ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ½ΠΈ спСцифичны.

На Π·Π°Ρ€Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ коммСрчСского успСха ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Π³Π°Π΄ΠΆΠ΅Ρ‚ΠΎΠ², Π½Π΅ΠΊΡ‚ΠΎ ΠΏΠΎ Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ ДТобс, отстаивал идСю ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ смартфон β€” это всСго лишь окошко ΠΊ всСмирной ΠΏΠ°ΡƒΡ‚ΠΈΠ½Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ всСгда с собой. ΠšΡ€ΡƒΡ‚ΠΎ ΠΆΠ΅ Π·Π²ΡƒΡ‡ΠΈΡ‚! Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»:

ΠŸΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ Safari ΡƒΠΆΠ΅ присутствуСт Π²Π½ΡƒΡ‚Ρ€ΠΈ iPhone. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ·ΡƒΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Web 2.0 ΠΈ Ajax прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выглядят ΠΈ Π²Π΅Π΄ΡƒΡ‚ сСбя Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ€ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ iPhone. И ΠΎΠ½ΠΈ способны прСкрасно Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π΅Π³ΠΎ сСрвисами: Π·Π²ΠΎΠ½ΠΈΡ‚ΡŒ, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ элСктронныС письма, Ρ€Π°Π·Ρ‹ΡΠΊΠΈΠ²Π°Ρ‚ΡŒ мСстополоТСниС Π² Google Maps. И Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ? Для этого Π½Π΅ Π½ΡƒΠΆΠ΅Π½ SDK! Π£ вас ΡƒΠΆΠ΅ всС Π΅ΡΡ‚ΡŒ для написания нСвСроятных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для iPhone, Ссли Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ соврСмСнныС Π²Π΅Π±-стандарты.

Π•ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ взгляд ДТобсу ΠΏΠΎΠΌΠΎΠ³ Π”ΠΆΠΎΠ½Π½ΠΈ Айв, ΡƒΠ±Π΅Π΄ΠΈΠ² Π΅Π³ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ устройства эппл Π±Π΅Π· Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… сторонних ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ доступны для создатСлСй ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, плюс ΠΎΡ‚ этого ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° потСряСт ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ. Π’ Ρ‚ΠΎΠΆΠ΅ врСмя, Π² ΠΊΡƒΠ»ΡƒΠ°Ρ€Π°Ρ… Π“ΡƒΠ³Π» Π·Ρ€Π΅Π» Π°Π½Π΄Ρ€ΠΎΠΈΠ΄ ΠΈ Ρƒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½Ρ‚Π° Π½Π΅ Π±Ρ‹Π»ΠΎ особого мнСния Π½Π° этот счСт.

БобствСнно, ΠΊ Ρ‡Π΅ΠΌΡƒ эта Π»ΠΈΡ€ΠΈΠΊΠ°. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ, ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π²Π° основных способа доставки прилоТСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ:

-НативноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” созданноС с использованиСм инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π΅Π½Π΄ΠΎΡ€ΠΎΠ²: Apple/Google ΠΈ распространяСмоС Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ΄ Apple Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ: UIKit, SwiftUI + Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ iOS SDK, язык программирования Swift (ΠΈ для особых случаСв старичок Objective-C)Для Андроид соотвСтствСнно β€” Android SDK, Jetpack Compose, языки: Java 8, Kotlin

Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π² качСствС срСды выполнСния ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ доступа ΠΊ рСсурсам дСвайса (я ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ сайтом, Ρ‚Π°ΠΊ ΠΌΡ‹ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… отдСляСм статичСскиС странички ΠΎΡ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Ρ‹Ρ…, Π½Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ). К Π½ΠΈΠΌ ΠΆΠ΅ относятся Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ WebView β€” прилоТСния, ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Ρ‚ΠΎΠ½ΠΊΠΈΠΌ слоСм Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ SDK Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° для открытия Π²Π΅Π±-прилоТСния, Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· сторы.На Π»Π°Π΄Π°Π½ Π΄Ρ‹ΡˆΠ°Ρ‰ΠΈΠ΅ прСдставитСли этого Π²Ρ‹ΠΌΠΈΡ€Π°ΡŽΡ‰ΠΈΠ΅Π³ΠΎ сСмСйства β€” Apache Cordova ΠΈ Ionic. Они Π½Π΅ ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ своС основноС Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” быстроС ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Для Π½ΠΈΡ… Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ классичСскиС Π²Π΅Π± Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ β€” HTML, CSS, Javascript. Бюда ΠΆΠ΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ ΠΏΠΎΠ΄Π΅Π»ΠΊΠΈ ΠΈΠ· no-code конструкторов Ρ‚ΠΈΠΏΠ° GlideApps ΠΈ Π΅Π³ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ².

Оба ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° стоят Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ ΠΏΠΎ ряду ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π²:

ΠŸΡ€ΠΎΠΌΠ΅ΠΆ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ…, с Π½Π΅Π΄Π°Π²Π½ΠΈΡ… ΠΏΠΎΡ€, Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡΡŒ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ‡Π°Ρ‰Π΅ всСго ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ кроссплатформСнныС:

Π“ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹Π΅, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ β€” прилоТСния написанныС с использованиСм сторонних инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, языков программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ свой Π½Π°Π±ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ интСрфСйсы ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… SDK с собствСнными интСрфСйсами ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ ΠΈΡ….

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ прСдставитСли этого сСмСйства: React Native, Native Script, Electron.

Пока ΠΌΡ‹ Π½Π΅ ΡƒΠ±Π΅ΠΆΠ°Π»ΠΈ Π΄Π°Π»Π΅ΠΊΠΎ, Ρ…ΠΎΡ‡Ρƒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡˆΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Ρ‚Π΅Ρ…Π½ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒ β€” самая кроссплатформСнная тСхнология, ΠΎΠ½ ΠΆΠ΅ язык программирования, Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, β€” C++! Π’Π°-Π΄Π°-Π°-Π°ΠΌ! И ΠΊΠ°ΠΊ Π½ΠΈ странно, ΠΎΠ½ ΠΎΡ‡Π΅Π½ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… кроссплатформСнных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Никаких компромиссов! Волько Ρ…Π°Ρ€Π΄ΠΊΠΎΡ€! Π’Π΅Π΄ΡŒ наши прилоТСния, это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ½ΠΎΠΏΠΎΡ‡ΠΊΠΈ ΠΈ списки. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сотСн Ρ‚ΠΎΡ‡Π΅ΠΊ Π½Π° ΠΊΠ°Ρ€Ρ‚Π°Ρ…, Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… с особыми возмоТностями синхронизации совмСстного доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, криптография, доставка ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²ΠΈΠ΄Π΅ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, СТСсСкундныС Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ молниСносно для дСсятков Π±ΠΈΡ€ΠΆΠ΅Π²Ρ‹Ρ… Ρ‚ΠΈΠΊΠ΅Ρ€ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Никто Π½Π΅ ΠΏΠΈΡˆΠ΅Ρ‚ эту Π»ΠΎΠ³ΠΈΠΊΡƒ Π΄Π²Π°ΠΆΠ΄Ρ‹ ΠΈΠ»ΠΈ Ρ‚Ρ€ΠΈΠΆΠ΄Ρ‹ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ.

Π“Π»Π°Π²Π½Ρ‹ΠΉ вопрос ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ (Π±Π΅Π·ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ½Ρ‹Ρ… бизнСс Ρ†Π΅Π»Π΅ΠΉ) β€” ΠΎΠΏΡ‹Ρ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ качСства ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ΄Π°Ρ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. И Π²ΠΎΡ‚ нСсколько ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π², Π²Π»ΠΈΡΡŽΡ‰ΠΈΡ… Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΠΏΡ‹Ρ‚:

Говоря ΠΎΠ±Ρ€Π°Π·Π½ΠΎ, ΠΏΠΎ стСпСни абстрактности ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ мобильной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

ΠšΡ€ΠΎΡΡΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, хотят Π·Π°Π²Π»Π΅Ρ‡ΡŒ нас прСимущСствами Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹. Π‘ этим Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡΠΏΠΎΡ€ΠΈΡ‚ΡŒ:

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ 2 кусочка ΠΊΠΎΠ΄Π°, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΡƒ с ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΎΠΉ:

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² часто Ρ€Π°Π·Π±Π°Π²Π»ΡΡŽΡ‚ C/C++ программистами. Они ΠΏΠΈΡˆΡƒΡ‚ кроссплатформСнныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для Ρ€Π°Π·Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π² основном Π½Π΅ связанных нСпосрСдствСнно с бизнСс Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ.

На стартС с нуля Π΅ΠΌΡƒ Π½Π΅Ρ‚ Ρ€Π°Π²Π½Ρ‹Ρ… Π² качСствС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΊ скорости Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. 2-3 Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° способны Π½Π°ΠΊΠΎΠ²Ρ‹Ρ€ΡΡ‚ΡŒ Π±Π΅Π·ΡƒΠΌΠ½ΠΎΠ΅ количСство Ρ„ΠΈΡ‡ Π² ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠ΅ сроки ΠΈ Π²Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚. ΠŸΡ€ΠΈ этом look-and-feel, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄ΡƒΡ‚ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΌΠΈ. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ количСство Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Ρ€Π΅ΡˆΠ°Ρ‚ мноТСство Π·Π°Π΄Π°Ρ‡ Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π― Π±Ρ‹ Π½Π°Π·Π²Π°Π» flutter сСрСбряной ΠΏΡƒΠ»Π΅ΠΉ, Π½ΠΎ. Π½Π°Π΄ΠΎ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ.

ВСхнология ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для создания UI! Как ΠΈ язык программирования Dart.

Π’Ρ‹Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΈΠ· Π²ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ Π² Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ„Π»Π°Ρ‚Ρ‚Π΅Ρ€ Π½Π° самом Π΄Π΅Π»Π΅:

Flutter is an open-source UI software development kit created by Google.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° с этим SDK ΠΌΠ½Π΅ всСгда Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π»Π° письмо ΠΈΠ· ΠŸΡ€ΠΎΡΡ‚ΠΎΠΊΠ²Π°ΡˆΠΈΠ½ΠΎ:

На Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΎΠΏΡ‹Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π² процСссС развития ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ возрастаСт, Π° кроссплатформСнной ΡƒΠ±Ρ‹Π²Π°Π΅Ρ‚. Π­Ρ‚ΠΎ обусловлСно Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ трСбуСтся большС усилий для сборки Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈ Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΠΎΠ΄Π° для 2Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π½Π΅ΠΆΠ΅Π»ΠΈ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ. Пока ΡƒΠΌΡƒΠ΄Ρ€Π΅Π½Π½Ρ‹Π΅ Π² особСнностях своих ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, ΠΊΠΎΠ΄Π΅Ρ€Ρ‹ скрупулСзно ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Π΄ΠΆΠ΅Π½Ρ‚Π΅Π»ΡŒΠΌΠ΅Π½ΡΠΊΠΈΠ΅ Π½Π°Π±ΠΎΡ€Ρ‹ для любого Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ прилоТСния, ΠΈΡ… ΠΊΠΎΠ»Π»Π΅Π³ΠΈ ΠΏΠΎ кроссплатформСнному Ρ†Π΅Ρ…Ρƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΆΠ΅ готовятся Π²Ρ‹ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ MVP. Всё мСняСтся Π½Π° Π·Ρ€Π΅Π»ΠΎΠΉ стадии ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°.

Π’ΠΎΡ‚ список Π±Π΅Π΄ Π½Π° кроссплатформС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π° ΠΏΠΎΠ·Π΄Π½Π΅ΠΉ стадии соТрут большС Π΄Π΅Π½Π΅Π³, Ρ‡Π΅ΠΌ Π½Π° стартС:

Π”Π°ΠΉΡ‚Π΅ Π·Π½Π°Ρ‚ΡŒ, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎ KMM ΠΈ Xamarin, ΠΆΠ΄Ρƒ вас ΠΈ ваши мнСния Π² коммСнтариях!

Канала Π² Ρ‚Π΅Π»Π΅Π³Π΅ Π½Π΅Ρ‚, Π½ΠΎ Ссли Ρ‡Ρ‚ΠΎ, ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² Π»ΠΈΡ‡ΠΊΡƒ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ· ΡƒΡŽΡ‚Π½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π° Java: ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ Ρ‚ΡƒΠ΄Π° ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ (Ρ‡Π°ΡΡ‚ΡŒ 1)

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Java ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ управляСмыС языки просты ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡ… возмоТностСй нСдостаточно β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π½ΡƒΠΆΠ½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, написанная Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° C ΠΈΠ»ΠΈ C++. Иногда хочСтся ΠΏΠΎΠ·Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠ· систСмного API, ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для модуля β€” ΠΈ Ρ‚ΠΎΠ³Π΄Π° прямой ΠΏΡƒΡ‚ΡŒ Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Но Ρ‚ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ: Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Π»Π΅Π³ΠΊΠΎ, Π½ΠΎ JVM Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΊΡ€Π°ΡˆΠΈΡ‚ΡŒΡΡ Π² случайных мСстах, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ°Π΄Π°Π΅Ρ‚, сборщик мусора пСрСстаСт ΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ с Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ, Π° Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Ρ†Π°Ρ€ΡΡ‚Π²ΡƒΡŽΡ‚ бСсконСчныС C-ΡˆΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ с Π±ΡƒΠΊΠ²Π°ΠΌΠΈ JNI. Π§Ρ‚ΠΎ ΠΆΠ΅ ΠΌΠΎΠ³Π»ΠΎ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ?

Иван Углянский (dbg_nsk) ΠΈΠ· Huawei разбираСтся со всСм ΠΏΠΎ порядку: Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΎΠΏΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Java ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΈ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ для ΠΈΡ… Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ совмСстной Ρ€Π°Π±ΠΎΡ‚Ρ‹ (ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ это Π²ΠΎΠΎΠ±Ρ‰Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ). Иван рассказываСт, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ просадок ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π²Π½Π΅Π·Π°ΠΏΠ½Ρ‹Ρ… OOM ΠΈ Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»ΡΠ΅Ρ‚ Π½Π° Ρ‚Π΅ΠΌΡƒ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ β€” Π² контСкстС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Panama ΠΈ Sulong.

ΠœΡ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π½Π°Ρ‚ΠΈΠ²Π°ΠΌΠΈ Π² Java. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ части:

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ расскаТСм, ΠΊΠ°ΠΊΠΈΠ΅ Π΅ΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, Ρ‡Ρ‚ΠΎ ΠΈΠ· Π½ΠΈΡ… быстрСС ΠΈ Π»ΡƒΡ‡ΡˆΠ΅, ΠΈ Π΅ΡΡ‚ΡŒ Π»ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° β€” всё с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΊΠΎΠ΄Π° ΠΈ подсказками.

Π”Π°Π»Π΅Π΅ β€” повСствованиС ΠΎΡ‚ Π»ΠΈΡ†Π° спикСра.

БСгодня ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΎ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΏΡ€ΠΎ ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ ΠΈΠ· Java Π² Π½Π΅Π³ΠΎ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ я JVM-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€, 7.5 Π»Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π² Excelsior, Π³Π΄Π΅ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Excelsior JET, Π° Π²ΠΎΡ‚ ΡƒΠΆΠ΅ Ρ‡ΡƒΡ‚ΡŒ большС Π³ΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Huawei, Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Excelsior@Huawei, Π³Π΄Π΅ ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ своим Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ: компиляторами, JVM ΠΈ Π½ΠΎΠ²Ρ‹ΠΌΠΈ языками программирования.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ я довольно ΠΌΠ½ΠΎΠ³ΠΎ копаюсь Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ устройствС JVM, ΡΠΌΠΎΡ‚Ρ€ΡŽ, ΠΊΠ°ΠΊ это устроСно, ΠΏΡ€Π°Π²Π»ΡŽ β€” Π² Ρ‚ΠΎΠΌ числС, ΠΈ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ связки JVM с Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сСгодня Ρ…ΠΎΡ‡Ρƒ Π²Π°ΠΌ ΠΏΡ€ΠΎ это Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ.

Π’ Java Π΅ΡΡ‚ΡŒ такая интСрСсная Ρ„ΠΈΡ‡Π° β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π±Π΅Π· Ρ‚Π΅Π», Π·Π°Ρ‚ΠΎ со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом native:

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² стоит ΠΈΡΠΊΠ°Ρ‚ΡŒ Π³Π΄Π΅-Ρ‚ΠΎ Π΅Ρ‰Ρ‘, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…. И написана ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π° ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° C/C++ ΠΈΠ»ΠΈ любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ языкС, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ C-like Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ интСрфСйсы.

Π‘Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠ°ΠΊ простыС сцСнарии, Ρ‚Π°ΠΊ ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТныС, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΡƒΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅. Если Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ goNative, Ρ‚ΠΎ просто ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΈΠ· Java Π² C. А Π²ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ goThere позволяСт ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΈΠ· Java Π² C, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ‚ΡƒΠ΄Π° Java-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ callback ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΡ‚ Π½Π΅Π³ΠΎ ΡƒΠΆΠ΅ Java-ΠΌΠ΅Ρ‚ΠΎΠ΄.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²ΠΎ врСмя исполнСния вашСго прилоТСния Π² call stack ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ java ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ„Ρ€Π΅ΠΉΠΌΡ‹.

Π—Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π½Π°Ρ‚ΠΈΠ²Ρ‹

Java β€” Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ managed-язык, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ всСго сдСлано для вашСго удобства.

Π’Π°ΠΌ Π΅ΡΡ‚ΡŒ автоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΠΈ Π²Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΡƒΠΆΠ΅ ΠΎΡ‚Π²Ρ‹ΠΊΠ»ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‚ΠΈΠΏΠ° ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти, висячих ссылок ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ β€” всё это ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π³Π΄Π΅-Ρ‚ΠΎ Π² Ρ€Π°ΠΉΠΎΠ½Π΅ C, Π° Π² Java Π΅ΡΡ‚ΡŒ GC, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ с этим Ρ…ΠΎΡ€ΠΎΡˆΠΎ справляСтся.

И Π²ΠΎΠΎΠ±Ρ‰Π΅ Java β€” бСзопасный язык. Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ΠΉΠ΄Π΅Ρ‚Π΅ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ массива, вмСсто уТасного Ρ€Π°Π·Π²Π°Π»Π°, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π² Π‘, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ красивоС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, ΠΈ с этой ситуациСй Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ.

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Java β€” это Ρ‚Π°ΠΊΠΎΠΉ Π¨ΠΈΡ€ ΠΈΠ· Π‘Ρ€Π΅Π΄ΠΈΠ·Π΅ΠΌΡŒΡ: Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ бСзопасноС, ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅, приятноС для ΠΆΠΈΠ·Π½ΠΈ мСсто, Π³Π΄Π΅ всС ΡΡ‚Π°Ρ€Π°ΡŽΡ‚ΡΡ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ вас всё Π±Ρ‹Π»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ломалось.

Если Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π° Π΅Π³ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, Ρ‚ΠΎ, скорСС всСго, Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚.

А Π²ΠΎΡ‚ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ β€” это Π΅Π³ΠΎ полная ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠœΠΎΡ€Π΄ΠΎΡ€, Π³Π΄Π΅ шаг Π²Π»Π΅Π²ΠΎ-Π²ΠΏΡ€Π°Π²ΠΎ, ΠΈ вас сТираСт Π³ΠΎΡ€Π½Ρ‹ΠΉ Ρ‚Ρ€ΠΎΠ»Π»ΡŒ.

Но Π·Π½Π°Π΅Ρ‚Π΅, ΠΈΠ½ΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ· ΡƒΡŽΡ‚Π½ΠΎΠ³ΠΎ Π¨ΠΈΡ€Π° ΠΈ ΠΈΠ΄Ρ‚ΠΈ Π² ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ ΠΊ Π ΠΎΠΊΠΎΠ²ΠΎΠΉ Π³ΠΎΡ€Π΅.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Допустим, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ прокси стоит Ρƒ вашСго ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ β€” Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ· Java Π²Ρ‹ этого Π½Π΅ сдСлаСтС, Π²Π°ΠΌ ΠΎΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π΄Ρ‘Ρ€Π½ΡƒΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ· WinAPI Π² случаС Windows.

Π•ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Π° мотивация. МногиС люди ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Java Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚, Π° Π²ΠΎΡ‚ C++ β€” это ΠΎΡ‡Π΅Π½ΡŒ быстро. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли Π²Π·ΡΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ самый performance critical ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° ΠΏΠ»ΡŽΡΡ‹, ΡΠ²ΡΠ·Π°Ρ‚ΡŒ всё это Ρ‡Π΅Ρ€Π΅Π· Π½Π°Ρ‚ΠΈΠ²Ρ‹, Ρ‚ΠΎ получится ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ ускорСниС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ΠŸΠΎΡ‡Π΅ΠΌΡƒ эта мотивация довольно ΡΠΎΠΌΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ, я ΠΏΠΎΠΊΠ°ΠΆΡƒ Π½ΠΈΠΆΠ΅, Π½ΠΎ Π² любом случаС ΠΎΠ½Π° присутствуСт.

НаконСц, Π² самом JDK ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹ Π² любом случаС ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ с этим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

И Π²ΠΎΡ‚ Π²Ρ‹ ΠΏΠΎΠ»Π½Ρ‹ энтузиазма, написали своё ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ Π½Π° Π‘, Π½Π°ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ Π½Π° Java, запускаСтС, ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ сСйчас всё ускорится, Π° Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅β€¦ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ SIGSEGV, Exception_Access_Violation ΠΈΠ»ΠΈ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ SIGSEGV.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, вашС ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ ΠΈΠ· Π¨ΠΈΡ€Π° Π² ΠœΠΎΡ€Π΄ΠΎΡ€ заканчиваСтся ΠΎΡ‡Π΅Π½ΡŒ быстро, ΠΊΠ°ΠΊ Ρƒ Π‘ΠΎΡ€ΠΎΠΌΠΈΡ€Π°. Π Π°Π·Π²Π°Π» ΡΡ‚Ρ€Π°ΡˆΠ½Ρ‹ΠΉ, выглядит Ρ‚Π°ΠΊ, Π±ΡƒΠ΄Ρ‚ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ сломалась сама Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина. НСкоторыС Π΄Π°ΠΆΠ΅ рСпортят Π±Π°Π³ΠΈ, ΠΌΠΎΠ», JVM Ρ€Π°Π·Π²Π°Π»ΠΈΠ»Π°ΡΡŒ.

На самом Π΄Π΅Π»Π΅ Ρ‡Π°Ρ‰Π΅ всСго ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π½Π°Ρ‚ΠΈΠ²Ρ‹.

Π’ этом постС я Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ…ΠΎΡ‡Ρƒ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ люди ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ SIGSEGV с Π½Π°Ρ‚ΠΈΠ²Π°ΠΌΠΈ, Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ бСзопасный ΠΏΡƒΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΈΠ· Π¨ΠΈΡ€Π° Π² ΠœΠΎΡ€Π΄ΠΎΡ€, Π½Π΅ ΠΎΡ‚ΡΡ‚Ρ€Π΅Π»ΠΈΡ‚ΡŒ сСбС Π½ΠΎΠ³Ρƒ, ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ SIGSEGV, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всё Π±Ρ‹Π»ΠΎ бСзопасно ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

По Ρ…ΠΎΠ΄Ρƒ повСствования ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ всС врСмя ΡΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ Π²ΠΎΡ‚ с Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ «Как ΠΏΠΎΠ·Π²Π°Ρ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²?Β»

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Если Π²Ρ‹ ΠΈΠ΄Π΅Ρ‚Π΅ ΠΈΠ· Π¨ΠΈΡ€Π° Π² ΠœΠΎΡ€Π΄ΠΎΡ€, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° Ρ‚Ρ€ΠΈ вопроса:

ΠžΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° эти вопросы подсвСтят Π½Π°ΠΌ самыС Π±ΠΎΠ»ΡŒΠ½Ρ‹Π΅ мСста Π² ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ Π΄ΠΎ нашСй эры

Π‘Π½Π°Ρ‡Π°Π»Π° Ρ‡ΡƒΡ‚ΡŒ-Ρ‡ΡƒΡ‚ΡŒ истории.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Нативы ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² Java Π΅Ρ‰Ρ‘ Π² самом Π½Π°Ρ‡Π°Π»Π΅, Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π² JDK 1.0 ΡƒΠΆΠ΅ Π±Ρ‹Π» Native Method Invocation, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволял Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ C-ΡˆΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Но ΠΎΠ½ Π±Ρ‹Π» Π·Π°Ρ‚ΠΎΡ‡Π΅Π½ Π½Π° Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Sun JVM. На Ρ‚ΠΎ, ΠΊΠ°ΠΊ Ρ‚Π°ΠΌ Π»Π΅ΠΆΠ°Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² памяти, ΠΊΠ°ΠΊΠΎΠΉ сборщик мусора Ρ‚Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ.

Π‘Ρ‹Π»ΠΈ ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹. НапримСр, Microsoft ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π»Π° свой Raw Native Interface. Он Π±Ρ‹Π» Π² Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, Π² Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Ρ…ΡƒΠΆΠ΅, Π½ΠΎ Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠ΄Π½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной β€” Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΆΠ΅ Microsoft J++.

Π‘Ρ‹Π»ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ Ρƒ Netscape, Π½ΠΎ Π² Ρ†Π΅Π»ΠΎΠΌ это Π±Ρ‹Π»ΠΈ Ρ‚Ρ‘ΠΌΠ½Ρ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π°. Когда Π²Ρ‹ писали Π½Π°Ρ‚ΠΈΠ², Π²Ρ‹ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° всСх JVM ΠΈΠ»ΠΈ хотя Π±Ρ‹ Π½Π° ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ.

Наша эра: JNI β€” Java Native Interface

Наша эра начинаСтся с появлСния Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚ΠΎΠ³ΠΎ Java Native Interface ΠΈΠ»ΠΈ JNI. Π­Ρ‚ΠΎ Π±Ρ‹Π» Π΅Π΄ΠΈΠ½Ρ‹ΠΉ интСрфСйс, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ всСми, ΠΈ ΠΎΠ½ Π±Ρ‹Π» прСкрасСн, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π±Ρ‹Π» JVM Π½Π΅ΠΉΡ‚Ρ€Π°Π»Π΅Π½.

Он Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ затачивался Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ сдСлана конкрСтная Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина, Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, какая раскладка ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π² памяти, Π½Π΅Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠΉ GC.

Если Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ JNI, гарантируСтся, Ρ‡Ρ‚ΠΎ ваш Π½Π°Ρ‚ΠΈΠ² Ρ‚Π°ΠΌ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π”Π°Π»Π΅Π΅ я Π±ΡƒΠ΄Ρƒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎ JNI ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ, Π½ΠΎ Ρ…ΠΎΡ‡Ρƒ Π°ΠΊΡ†Π΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π½Π° Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ это Π±Ρ‹Π» ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ прогрСсс для всСй отрасли, Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Ρ‹ Π±Π΅Π· страха, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π½Π΅ завСдутся.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π‘ΠΎ стороны Java всё выглядит довольно ΠΌΠΈΠ»ΠΎ, Π²Ρ‹ это ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ.

ПишСм ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π±Π΅Π· Ρ‚Π΅Π»Π°, пишСм Π³Π΄Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² System.LoadLibrary Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ dll-ΠΊΡƒ, ΠΈ послС этого просто Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ этим ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² Π‘ ΠΈΠ»ΠΈ Π‘++.

Callback β€” это просто класс, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ call, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ строку Β«Ok, we are in Shire again!Β», Π² ΠΌΠΎΡ‘ΠΌ случаС ΠΌΡ‹ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈΡΡŒ Π² Π¨ΠΈΡ€ Π½Π° ΠΎΡ€Π»Π°Ρ….

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ?

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π½Π° языкС Π‘.

Π—Π΄Π΅ΡΡŒ всё Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΆΠ΅ Π½Π΅ Ρ‚Π°ΠΊ красиво, Π½ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ JavaToNative.h со всСми Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ, Π½ΠΎ ΠΏΡ€ΠΈ этом Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ написано, Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Π½Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Π—Π΄Π΅ΡΡŒ появились ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ заклинания Ρ‚ΠΈΠΏΠ° JNICall. Π—Π΄Π΅ΡΡŒ совсСм Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: ΠΎΠ½ΠΎ содСрТит Π΅Ρ‰Π΅ ΠΈ package ΠΈ имя класса. И сигнатуры ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ! Π£ нас Π±Ρ‹Π» 1 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° Callback, Π° здСсь ΠΈΡ… ΡƒΠΆΠ΅ Ρ‚Ρ€ΠΈ ΠΈ ΠΎΠ½ΠΈ совсСм Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

jclass появился, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π°Ρ‚ΠΈΠ² Π±Ρ‹Π» статичСским ΠΈ этим ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ пСрСдаСтся Java-класс, Ρ‡Π΅ΠΉ статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся. Callback прСвратился Π² jobject ΠΈ появился Π½ΠΎΠ²Ρ‹ΠΉ JNIEnv со Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠΎΠΉ (ΠΏΡ€ΠΎ Π½Π΅Π³ΠΎ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅).

ΠŸΡ€Π°Π²ΠΈΠ»Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΎΡ‡Π΅Π½ΡŒ Ρ‡Π΅Ρ‚ΠΊΠΈΠ΅ ΠΈ описаны Π² JNI-спСцификации. ВсС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ C-ΡˆΠ½Ρ‹Π΅ (Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ макросами ΠΈ Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° Π‘-ΡˆΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ…), всС рСфСрСнс-Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² jobject ΠΈΠ»ΠΈ Π² Ρ€Π΅Π΄ΠΊΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ… Π² Π΅Π³ΠΎ наслСдников β€” jclass, jstring, jthrowable, jarray.

Π­Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ вопрос Π² нашСй ΠΊΠ°Ρ€Ρ‚Π΅ β€” ΠΊΠ°ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Она это Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ, Π·Π½Π°Π΅Ρ‚ всС эти ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ Π² ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΈΡ‰Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π§Ρ‚ΠΎ Π·Π° JNIEnv?

АргумСнт JNIEnv * β€” это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠ· 214 ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, которая называСтся JNINativeInterface.

Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

А Π²ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, скорСС всСго, Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

JNINativeInterace ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΌΠ΅Ρ‚Π°ΡƒΡ€ΠΎΠ²Π½Π΅ β€” ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Π±Ρ‹ Π½Π° Java, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚Π°-сущности: handle для классов, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. НапримСр здСсь Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ handle Java-класса, Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ экзСмпляры (Java ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹), Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Java ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‡Π΅Ρ€Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Call*Method, Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ€Π΅Ρ„Π»Π΅ΠΊΡΠΈΡŽ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚Π΅ΡΡŒ этим Π½Π΅ Π² Java-ΠΊΠΎΠ΄Π΅, Π° Π² C.

ВсС эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ JNI-интСрфСйса β€” СдинствСнный способ Ρ…ΠΎΡ‚ΡŒ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Java-ΠΌΠΈΡ€ΠΎΠΌ: Π»ΠΈΠ±ΠΎ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π»ΠΈΠ±ΠΎ просто ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

И это ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ вопрос Π² нашСй ΠΊΠ°Ρ€Ρ‚Π΅: ΠΊΠ°ΠΊ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с JVM. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ β€” Ρ‡Π΅Ρ€Π΅Π· 214 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Ρ€Π°Ρ‚Π°ΠΌΠΈ Π² Π¨ΠΈΡ€.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ напишСм нашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π΅Π»ΠΎ.

Для этого я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ jclass, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ классу ΠΌΠΎΠ΅Π³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Π½Π°Ρ…ΠΎΠΆΡƒ Π² Π½Ρ‘ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся call, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ void, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JNI-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CallVoidMethod. Π”ΠΎΠ»ΠΆΠ½Π° Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒΡΡ строка, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈΡΡŒ Π½Π° ΠΎΡ€Π»Π°Ρ… ΠΈ всё ΠΎΠΊ.

Как всС это ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ?

НаконСц, Π΄Π°Π²Π°ΠΉΡ‚Π΅ обсудим, ΠΊΠ°ΠΊ всС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Ρ€Π°Π½Π΅Π΅ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ.
Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Windows, поэтому Π³ΡƒΠ³Π»ΡŽ Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для JNI Π½Π° этой систСмС:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρƒ нас получаСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° NativeLib.dll.

Π­Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, довольно нСприятно с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния кроссплатформСнности. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ, Ссли Π²Ρ‹ собираСтС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для Linux ΠΈΠ»ΠΈ macOS β€” заклинания Π±ΡƒΠ΄ΡƒΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π΅ΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΡƒΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΡ‚ всСго этого Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. НапримСр, Nokee plugins. Π­Ρ‚ΠΎ кроссплатформСнноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°Ρ€Π³Π΅Ρ‚ Π² gradle скрипт ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΏΠΎΠ΄ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠ΅ вас ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

ОкСй, Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ способом ΠΌΡ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ собрали, послС Ρ‡Π΅Π³ΠΎ запускаСм нашС Java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ получаСм…

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π£Ρ€Π°, ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΠ»ΠΈ своС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ Π² ΠœΠΎΡ€Π΄ΠΎΡ€ ΠΈ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈΡΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΏΡ€ΠΈ этом ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΏΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° Π½Π΅ самом приятном языкС C, Π΄Π° ΠΈ выглядит это всС довольно уТасно.

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ?

А ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ вСщСй…

Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π²Ρ‹ тСряСтС ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΎΠ²ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

Π”Π°, Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ callback, Π½ΠΎ ΠΎΠ½ прСвратился Π² jobject, ΠΈ ΠΊΠ°ΠΊΠΎΠΉ Π±Ρ‹Π» Ρ‚ΠΈΠΏ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ β€” сходу Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ.

Допустим, Ρƒ мСня Π±Ρ‹Π» Π±Ρ‹ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΆΠ΅ java.lang.Object. И ΠΎΠ½ Π±Ρ‹ Ρ‚ΠΎΠΆΠ΅ прСдставлялся Π² Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΊΠ°ΠΊ jobject, Π° ΠΏΠΎΡ‚ΠΎΠΌ я ΠΌΠΎΠ³Ρƒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ случайно ΠΏΠΎ Π½Π΅Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎΠ·Π²Π°Ρ‚ΡŒ CallVoidMethod, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Ρ‚ΡƒΠ΄Π° Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π΅ Callback, Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ java.lang.Object ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΏΠΎΠ·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ call (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚Π°ΠΌ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅Ρ‚).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

МСня Π½Π΅ остановит компилятор, Π½Π΅ остановит runtime Ρ€ΠΎΠ²Π½ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ случится Ρ€Π°Π·Π²Π°Π» ΠΈΠ·-Π·Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΏΠΎΠ·Π²Π°Ρ‚ΡŒ call ΠΎΡ‚ java.lang.Object.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ похоТая история с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ JNI-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅. Никто Π½Π΅ ΠΏΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π‘allVoidMethod, Π° Π½Π΅ CallBooleanMethod ΠΈΠ»ΠΈ CallStaticVoidMethod ΠΈΠ»ΠΈ Π΅Ρ‰Ρ‘ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ β€” это Π±ΡƒΠ΄Π΅Ρ‚ ваша ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ. Если Π²Ρ‹ ошиблись, Ρ‚ΠΎ случаСтся Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (прям ΠΊΠ°ΠΊ Π² ΠΏΠ»ΠΎΡ…ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° Π‘), Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡Π½Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина β€” нСизвСстно.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΈΠ· Π½Π°Ρ‚ΠΈΠ²Π° Java-ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΎΠ½ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, послС Ρ‡Π΅Π³ΠΎ исполнСниС возвращаСтся Π² Π½Π°Ρ‚ΠΈΠ². Π’ Java ΠΌΡ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ автоматичСски ΠΏΡ€ΠΎΠ»Π΅Ρ‚Π°Π΅Ρ‚ дальшС, Π½ΠΈΡ‡Π΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Но Π² Π΄Π°Π½Π½ΠΎΠΌ случаС это снова ваша ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ! Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π° Π½Π΅ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π»ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Java-ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ExceptionCheck ΠΈΠ»ΠΈ ExceptionOccurred), ΠΈ Ссли Ρ‚Π°ΠΊ, Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ здСсь (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ExceptionDescribe ΠΈ ExceptionClear). Если ΠΆΠ΅ Π²Ρ‹ этого Π½Π΅ сдСлаСтС, Ρ‚ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° исполнСниС ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ Π² Java-ΠΊΠΎΠ΄, это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅Ρ‚ΠΈΡ‚ ΡƒΠΆΠ΅ совсСм ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ³ΠΎ для вас мСста, ΠΈ Π²Ρ‹ снова ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

ВмСсто ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ³ΠΎ ΠΈ уТасного Ρ€Π°Π·Π²Π°Π»Π° Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ с понятным stacktrace, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ написано, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΏΡƒΡ‚Π°Π»ΠΈ MethodID ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π½Π΅ Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ (Ρ‡Ρ‚ΠΎ, собствСнно, Ρƒ нас ΠΈ происходит!).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ быстро ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² большСм ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π΅ ошибок с Π½Π°Ρ‚ΠΈΠ²Π°ΠΌΠΈ.

Π­Ρ‚ΠΎ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π»Π΅Ρ‡Π΅Π½Ρ‹ всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π½ΠΎ всС самыС простыС β€” Π΄Π°.

Garbage Collector ΠΈ Native-ΠΊΠΎΠ΄

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΎ послСдний ΠΏΡƒΠ½ΠΊΡ‚ Π² нашСй ΠΊΠ°Ρ€Ρ‚Π΅ β€” ΠΊΠ°ΠΊ GC Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΏΡ€ΠΎ это Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΡƒΠΆΠ½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ? Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Java ΠΊΠΎΠ΄Π΅, ΠΊΠΎΠ³Π΄Π° JVM Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ мусор, ΠΎΠ½Π° приостанавливаСт Java ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сгСнСрированных компилятором Ρ‚ΠΎΡ‡ΠΊΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ GC safepoints. Π”Π°Π²Π°ΠΉΡ‚Π΅ для простоты Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ случай StopTheWorld-ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ². Π’ Ρ‚Π°ΠΊΠΎΠΌ сцСнарии Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ всС Java-ΠΏΠΎΡ‚ΠΎΠΊΠΈ достигли Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΡ… safepoints ΠΈ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ GC-Ρ‚Ρ€Π΅Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, собствСнно, ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ мусор.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ GC ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²ΠΎ врСмя своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹. Для ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΡƒΡ‡Π΅ΠΉ, для своих ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Ρ†Π΅Π»Π΅ΠΉ β€” Π½Π΅Π²Π°ΠΆΠ½ΠΎ. Если Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ· Java-Ρ‚Ρ€Π΅Π΄ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Java Ρ…ΠΈΠΏΠΎΠΌ β€” Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ поля Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Java ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ случится нСприятная ситуация: этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ просто ΡƒΠΊΡ€Π°Π΄ΡƒΡ‚ Ρƒ Π½Π΅Π³ΠΎ ΠΈΠ·-ΠΏΠΎΠ΄ носа ΠΈ пСрСнСсут Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ памяти. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·Π²Π°Π»).

Π’Π°ΠΊ Π²ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с safepoints Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Ρ‚Π°ΠΊΠΎΠΉ фокус Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚.

Safepoints Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ компиляторы ΠΈΠ· JVM, Π° Ссли это ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ внСшний ΠΊΠΎΠ΄, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° C ΠΈΠ»ΠΈ C++, скомпилированный clang-ΠΎΠΌ, Ρ‚ΠΎ Ρ‚Π°ΠΌ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… safepoint! Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΌΡ‹ просто Π½Π΅ смоТСм ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ наши ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π½Π°Ρ‚ΠΈΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ мусор. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΡΠΌΠΈΡ€ΠΈΡ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‚ΠΈΠ²Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ со сборкой мусора.

И Ρ‚ΠΎΠ³Π΄Π° схСма мСняСтся Ρ‚Π°ΠΊ: ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π»ΠΈΡ†Π°, Ρ‚Ρ€Π΅Π΄Ρ‹, ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Допустим, ΠΎΠ½ΠΈ ΡƒΡˆΠ»ΠΈ Π² Π½Π°Ρ‚ΠΈΠ² Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΏΠΎΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ мусор, ΠΈ Π²ΠΎΡ‚ ΠΎΠ½ΠΈ спокойно Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с GC-Ρ‚Ρ€Π΅Π΄Π°ΠΌΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π•ΡΡ‚ΡŒ ограничСния. На Π²Ρ…ΠΎΠ΄Π΅ Π² Π½Π°Ρ‚ΠΈΠ² Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ сборщику мусора: ΠΌΡ‹ ΡƒΡˆΠ»ΠΈ Π² Π½Π°Ρ‚ΠΈΠ², Π½Π΅ ΠΆΠ΄ΠΈ нас, спокойно собирай мусор. На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π° Π½Π΅ ΠΈΠ΄Π΅Ρ‚ Π»ΠΈ сСйчас сборка мусора, ΠΈ Ссли ΠΈΠ΄Ρ‘Ρ‚ β€” ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ.

Но ΠΏΡ€ΠΈ этом всё Π΅Ρ‰Ρ‘ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: Π΄Π°ΠΆΠ΅ Π² Π½Π°Ρ‚ΠΈΠ²Π΅ Π²Ρ‹ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ ΠΏΡ€Π°Π²Π° Ρ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ Java-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сСйчас ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·ΡΡ‚ΡŒ ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ GC.

Как Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, всС наши Java-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π½Π°Ρ‚ΠΈΠ²Π°Ρ… ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ»ΠΈΡΡŒ Π² jobject.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ jobject β€” Π½Π΅ просто ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ для Java-ссылок, Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ Ρ…Π΅Π½Π΄Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ адрСс Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Java-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

ГарантируСтся, Ρ‡Ρ‚ΠΎ Java-машина ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ связь этого адрСса с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ адрСсом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли ΠΌΡ‹ ΠΏΠΎΠ΄Π²ΠΈΠ½ΡƒΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ jobject Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΠ°Ρ‚Ρ‡Π΅Π½ автоматичСски.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, СдинствСнный способ ΠΏΠΎΠ²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Java-ΠΌΠΈΡ€ΠΎΠΌ ΠΈΠ· Π½Π°Ρ‚ΠΈΠ²Π° β€” это JNI-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с jobject. ΠŸΠΎΡ‡Ρ‚ΠΈ Π²ΠΎ всСх ΠΈΠ· Π½ΠΈΡ… стоит синхронизация с GC, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ смоТСтС ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ, ΠΏΠΎΠΊΠ° ΠΈΠ΄Π΅Ρ‚ сборка мусора.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Если послСдним использованиСм Π²Π°ΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Ρ‹Π»Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΈΡ… Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ‚ΠΎ гарантируСтся, Ρ‡Ρ‚ΠΎ Π·Π° врСмя исполнСния этого Π½Π°Ρ‚ΠΈΠ²Π° ΠΈΡ… Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ собСрСт. Π­Ρ‚ΠΈ jobject ΡΠ²Π»ΡΡŽΡ‚ΡΡ своСобразными GC-root, Ρ‡Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ.

JNI References

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΈ главная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ для Ρ…Π΅Π½Π΄Π»ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ систСма управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Π­Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½ΠΈ Π½Π° Java, Π½ΠΈ Π½Π° C, скорСС, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ срСднСС ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Всё, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π² ΠΊΠΎΠ΄Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ jobject, Π½Π° самом Π΄Π΅Π»Π΅ являСтся слоТным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ JNI Reference, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π±Ρ‹Π²Π°ΡŽΡ‚ Ρ‚Ρ€Π΅Ρ… Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, local references.

Они Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅ дольшС, Ρ‡Π΅ΠΌ исполняСтся Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π» создан local reference (полная аналогия с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ).

Они интСрСсны, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ JNI-reference β€” это ΠΈΠΌΠ΅Π½Π½ΠΎ LR. ΠŸΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Java-Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² Π½Π°Ρ‚ΠΈΠ² β€” ΠΎΠ½ΠΈ автоматичСски Π·Π°Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π»ΠΎΠΊΠ°Π»Ρ€Π΅Ρ„Ρ‹, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ JNI-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ β€” ΠΈΠ· Π½Π΅Π΅ Ρ‚ΠΎΠΆΠ΅ вСрнСтся Π»ΠΎΠΊΠ°Π»Ρ€Π΅Ρ„. А Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, с этими ΡˆΡ‚ΡƒΠΊΠ°ΠΌΠΈ, нСсмотря Π½Π°, казалось Π±Ρ‹, ΠΎΡ‡Π΅Π½ΡŒ Π΅ΡΡ‚Π΅ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΈ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ схСму очистки, Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ памяти.

ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ это Π½Π° нСбольшом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π°Π»Π»ΠΎΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Ρ… количСствах ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ прямо ΠΈΠ· Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Для этого Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ класс BornInNative с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JNI-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ FindClass, Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ конструктор ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄-ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ инстансу, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. А ΠΏΠΎΡ‚ΠΎΠΌ просто Π² Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JNI-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ NewObject Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

NewObject Π°Π»Π»ΠΎΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ‚Ρƒ ΡΠ°ΠΌΡƒΡŽ local reference, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°Ρ‚Π΅ΠΌ сохраняСм Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ obj Ρ‚ΠΈΠΏΠ° jobject. ΠžΡ‚ Π½Π΅Ρ‘ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ дальшС Π°Π»Π»ΠΎΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Π’ΠΎΡ‚ Ссли Π²Ρ‹ написали Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π½Π° Java, Ρƒ вас Π±Ρ‹ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ сомнСний Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ здСсь всё Ρ…ΠΎΡ€ΠΎΡˆΠΎ с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ очСрСдная итСрация Ρ†ΠΈΠΊΠ»Π°, созданный Π½Π° этой ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΡƒΠΆΠ΅ Π½ΠΈΠΊΠΎΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ΅Π½, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, GC ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΈΠ΄Ρ‘Ρ‚ ΠΈ собСрСт Π΅Π³ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли памяти Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Ρ‚ΡŒ для ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ.

На Java Π±Ρ‹ всё Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ, Π½ΠΎ Π² Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π²Π°ΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚. ΠŸΡ€ΠΎ Local reference гарантируСтся, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡƒΠΌΠΈΡ€Π°ΡŽΡ‚ Π½Π΅ ΠΏΠΎΠ·ΠΆΠ΅, Ρ‡Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΈΠ· Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Но это ΠΈ всС: сами ΠΏΠΎ сСбС ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ LR, ΠΎΠ½ΠΈ ΡƒΠΌΠΈΡ€Π°Ρ‚ΡŒ Π½Π΅ обязаны ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π§Π΅Ρ€Π΅Π· нСсколько сотСн ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΌΡ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ стали Ρ„Π΅ΠΉΠ»ΠΈΡ‚ΡŒΡΡ. JVM сСйчас Π² ΠΊΠΎΠΌΠ°Ρ‚ΠΎΠ·Π½ΠΎΠΌ состоянии, ΠΎΠ½Π° пытаСтся Π²Ρ‹ΠΊΠΈΠ½ΡƒΡ‚ΡŒ out of memory, Π½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ получаСтся, вСдь Π² Π½Π°Ρ‚ΠΈΠ²Π΅ ΠΌΡ‹ это Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π’Ρ‹ Π·Π°ΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ 1 Π“Π‘, Π½ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° самом Π΄Π΅Π»Π΅ ΡƒΠΆΠ΅ 2 Π“Π‘, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π°) всС Java-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² heap, Π±) сами Π½Π΅ΡƒΠΌΠΈΡ€Π°ΡŽΡ‰ΠΈΠ΅ jobject Ρ‚ΠΎΠΆΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ (Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ) ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти вашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ прСвысило ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π»ΠΈΠΌΠΈΡ‚ Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚.

Π§Ρ‚ΠΎΠ±Ρ‹ это ΠΏΠΎΡ‡ΠΈΠ½ΠΈΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ функция DeleteLocalRef, которая Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ JVM, Ρ‡Ρ‚ΠΎ локальная ссылка большС Π½Π΅ Π½ΡƒΠΆΠ½Π°, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ, Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π²ΠΎ врСмя GC.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ Xmx.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ с local Reference Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ memory leak, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈ Π²ΠΈΡΡΡ‰ΡƒΡŽ ссылку. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ LR Π² static-ΠΏΠΎΠ»Π΅, Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Π½Π°Ρ‚ΠΈΠ²Π°, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ это ΠΏΠΎΠ»Π΅. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠšΡ€ΠΎΠΌΠ΅ LR Π΅ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ…Π΅Π½Π΄Π»Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Global Reference. Π’Π°ΠΊΠΈΠ΅ ссылки ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹ явно ΠΈΡ… Π½Π΅ освободитС. Π—Π΄Π΅ΡΡŒ Π΅Ρ‰Ρ‘ Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ памяти (достаточно просто Π·Π°Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ DeleteGlobalRef), Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны ΠΎΠ½ΠΈ Π±ΠΎΠ»Π΅Π΅ прямолинСйны, Π½Π΅Ρ‚ нСоТиданностСй. Π—Π°Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ·Π²Π°Ρ‚ΡŒ DeleteGlobalRef β€” Π·Π½Π°Ρ‡ΠΈΡ‚, Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ‚Π΅Ρ‡ΠΊΠ°.

НаконСц Π΅ΡΡ‚ΡŒ Weak Global Reference, это GR, Π½ΠΎ Π² Π½ΠΈΡ… Π½Π΅ гарантируСтся, Ρ‡Ρ‚ΠΎ GC Π½Π΅ собСрСт ваш ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π­Ρ‚ΠΎ полная аналогия со слабыми ссылками ΠΈΠ· Java. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π½ΠΈΠΌΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ ΠΈ для Π½Π°Ρ‚ΠΈΠ²ΠΎΠ² Ρ‚ΠΎΠΆΠ΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π•Ρ‰Π΅ большС слоТностСй с GC

ΠšΡ€ΠΎΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с JNI Reference стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ JNI-интСрфСйса Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ интСрСсныС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ со сборщиками мусора. Допустим, Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ Π² Π½Π°Ρ‚ΠΈΠ² массив, ΠΎΠ½ завСрнСтся Π² jobject, Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‡Π΅Ρ€Π΅Π· jni-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” это ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΠ»Π³ΠΎ.

ВмСсто этого Π²Ρ‹ навСрняка Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊΠΎ всСму Ρ€Π΅Π³ΠΈΠΎΠ½Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· массива Π·Π° Ρ€Π°Π·. Для этого Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, GetIntArrayElements. Однако Ρƒ нас ΠΎΠΏΡΡ‚ΡŒ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Ссли Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ GC. Π‘ этим Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Π•ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΌΠΎΠΆΠ½ΠΎ Β«Π·Π°ΠΏΠΈΠ½ΠΈΡ‚ΡŒΒ» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΡΠΊΠ°Π·Π°Ρ‚ΡŒ сборщику мусора Β«Π΄Π°Π²Π°ΠΉ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ ΠΏΠΎΠΊΠ° массив, Ρ‚Ρ‹ собирай мусор, Π° Π΅Π³ΠΎ Π½Π΅ Π΄Π²ΠΈΠ³Π°ΠΉΒ».

Вторая Ρ‚Π°ΠΊΡ‚ΠΈΠΊΠ° β€” просто ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π² Π½Π°Ρ‚ΠΈΠ²Π΅ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с ΠΊΠΎΠΏΠΈΠ΅ΠΉ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ массив.

JNI Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° GetIntArrayElements Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚Π°ΠΊΡƒΡŽ Π΄Π²ΠΎΠΉΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹: Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„Π»Π°ΠΆΠΎΠΊ. Если Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Ρ€Π΅ΡˆΠΈΠ»Π°ΡΡŒ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ Ρ‚ΡƒΠ΄Π° Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ true, Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ false, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.

ΠŸΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹ΠΉ камСнь здСсь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин ΠΈ сборщиков мусора Π½Π΅ ΡƒΠΌΠ΅ΡŽΡ‚ pin-Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ. Π•ΡΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π½ΠΎ скорСС всСго, ΠΊΠ°ΠΊ Π±Ρ‹ Π²Ρ‹ Π½Π΅ надСялись Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ копирования Π½Π΅ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, ΠΎΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Π½Π°Ρ‚ΠΈΠ²Π΅ с массивом Π½Π° 2 Π“Π‘ Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ с ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ Π² Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π°Ρ€ΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈ ΠΏΠΎ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΡŽ памяти вашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΅ΡΡ‚ΡŒ особСнныС JNI-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° GetArrayElementsCritical (ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с суффиксом Critical), ΠΎΠ½ΠΈ всячСски ΡΡ‚Π°Ρ€Π°ΡŽΡ‚ΡΡ Π½Π΅ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив.

Пиннинга Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ GC Π½Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ выходят ΠΈΠ· ситуации?

Они говорят: Β«Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π° врСмя исполнСния этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ сборки мусора, ΠΏΡƒΡΡ‚ΡŒ GC ΠΏΠΎΠ΄ΠΎΠΆΠ΄Ρ‘Ρ‚Β». Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π΄Π°Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π²Ρ‹ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π±Π΅Π· ΠΊΠΎΠΏΠΈΠΉ, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ обратная сторона ΠΌΠ΅Π΄Π°Π»ΠΈ.

Π’Ρ‹ ΠΎΡ‚ΠΎΠ΄Π²ΠΈΠ³Π°Π΅Ρ‚Π΅ GC Π½Π° Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ срок, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ ΠΏΠ»ΠΎΡ…ΠΎ само ΠΏΠΎ сСбС, Π½ΠΎ ΠΏΡ€ΠΈ самом ΠΏΠ»ΠΎΡ…ΠΎΠΌ сцСнарии Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π΅Π΄Π»ΠΎΠΊ ΠΈ зависаниС вашСго прилоТСния. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² постС АлСксСя Π¨ΠΈΠΏΠΈΠ»Ρ‘Π²Π°.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, нСльзя Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎ Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΈ Π½Π΅ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π Π°Π· Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ C-ΠΊΠΎΠ΄, Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, каТСтся, Ρ‡Ρ‚ΠΎ это Π΄ΠΎΠ»ΠΆΠ½ΠΎ чСртовски быстро Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Java. На самом Π΄Π΅Π»Π΅ β€” это большоС Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сам Π²Ρ‹Π·ΠΎΠ² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² β€” это ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ!

ВсС Π·Π°ΠΌΠ΅Ρ€Ρ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° машинС: Intel Core i7-7700 @ 3.60 GHz;16GB RAM, Linux Ubuntu 18.04

НачнСм с простого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. ΠœΡ‹ ΠΈΠ· Java Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Java ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±Π΅Π· ΠΈΠ½Π»Π°ΠΉΠ½Π°. ΠœΠ΅Ρ€ΠΈΠΌ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JMH, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 696 ΠΏΠΎΠΏΡƒΠ³Π°Π΅Π², (большС β€” Π»ΡƒΡ‡ΡˆΠ΅).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ экспСримСнт ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ ΠΈΠ· Java Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‚ΠΎΠΆΠ΅ пустой, Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния. И ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ просадку ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² 3,3 Ρ€Π°Π·Π° Π½Π° jdk8u252.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

ΠŸΡ€ΠΈ этом Π½Π° jdk11 Π²Ρ‹ ΡƒΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ просадку ΡƒΠΆΠ΅ Π² 6 Ρ€Π°Π·. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий Java рассмотрим Π² ΠΊΠΎΠ½Ρ†Π΅ Π΄ΠΎΠΊΠ»Π°Π΄Π°, Π° сСйчас ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ наши измСрСния.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π·Π»ΠΎΠ²Π΅Ρ‰ΠΈΠΉ экспСримСнт ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ ΠΈΠ· Java Π½Π°Ρ‚ΠΈΠ², Π° ΠΎΡ‚Ρ‚ΡƒΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· callback ΠΏΠΎΠ·ΠΎΠ²Ρ‘ΠΌ пустой Java-ΠΌΠ΅Ρ‚ΠΎΠ΄. Π›ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ здСсь случится просСданиС Ρ€Π°Π·Π° Π² Π΄Π²Π° (вСдь стало Π² Π΄Π²Π° Ρ€Π°Π·Π° большС Ρ€Π°Π±ΠΎΡ‚Ρ‹). На самом Π΄Π΅Π»Π΅ просадка Π±ΡƒΠ΄Π΅Ρ‚ Π² 10 Ρ€Π°Π·.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π’.Π΅.Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΈΠ· Java Π² Π½Π°Ρ‚ΠΈΠ² Π΄ΠΎΡ€ΠΎΠΆΠ΅, Ρ‡Π΅ΠΌ просто ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Π½Π°Ρ‚ΠΈΠ².

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ происходит?

Если Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² сгСнСрированном ΠΊΠΎΠ΄Π΅ хочСтся ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ просто ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ call, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ адрСсу.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

И Π²Ρ‹ этот call ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅, Π½ΠΎ Π²ΠΎΠΊΡ€ΡƒΠ³ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ количСство Ρ€Π°Π±ΠΎΡ‚Ρ‹ для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π‘ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ самого Π²Ρ‹Π·ΠΎΠ²Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ:

И всё это Π΄Π°Ρ‘Ρ‚ просадку ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² ΡˆΠ΅ΡΡ‚ΡŒ Ρ€Π°Π·.

Вторая Π²ΠΎΠ»Π½Π° просадки ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ происходит, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠ½Π»Π°ΠΉΠ½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π²Ρ€Π°ΠΆΠ΄Π΅Π±Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΎΠ½ написан Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ языкС, Π° скомпилирован Π΄Ρ€ΡƒΠ³ΠΈΠΌ компилятором. Π£ нас просто Π½Π΅Ρ‚ тСхничСской возмоТности ΠΏΡ€ΠΎΠΈΠ½Π»Π°ΠΉΠ½ΠΈΡ‚ΡŒ это Π² Java. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² нашСм ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈ Java ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π΅Π· ΠΈΠ½Π»Π°ΠΉΠ½Π°, ΠΈΠ½Π°Ρ‡Π΅ Ρ€Π°Π·Π½ΠΈΡ†Π° Π±Ρ‹Π»Π° Π±Ρ‹ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ огромная, Ρ‡Ρ‚ΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ смысла.

Ну ΠΈ ΠΏΡ€ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Java β€” Ρ‚Π°ΠΊ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ·-Π·Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Hotspot. Когда Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ callback, происходит ΠΌΠ½ΠΎΠ³ΠΎ лишнСй ΠΈ тяТСлой Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠ³ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅.

На этой ΠΏΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½ΠΎΠΉ Π½ΠΎΡ‚Π΅ ΠΌΡ‹ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅ΠΌ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ ΠΏΡ€ΠΎ JNI, ΠΈ Π²ΠΎΡ‚ список практичСских совСтов ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ части Π΄ΠΎΠΊΠ»Π°Π΄Π°, слСдуя ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ, Π²Ρ‹ скорСС всСго ΠΈΠ·Π±Π΅ΠΆΠΈΡ‚Π΅ нСприятных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ Ρ€Π°Π·Π²Π°Π»ΠΎΠ².

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

ПодвСдСм ΠΈΡ‚ΠΎΠ³ этой части Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ β€” «ПоявлСниС JNI Π² своё врСмя Π±Ρ‹Π»ΠΎ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΡ€Ρ‹Π²ΠΎΠΌ Π² отрасли, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ сСгодня для взаимодСйствия с Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ слишком ΡƒΠΆ больно».

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ части ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΎ сСгодняшниС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ JNI, ΠΈΡ… ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ слабыС стороны, Π° Ρ‚Π°ΠΊΠΆΠ΅ обсудим Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ всС нашС прСдставлСниС ΠΎ Π½Π°Ρ‚ΠΈΠ²Π°Ρ… Π² Java: ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Panama ΠΈ Sulong.

ΠœΠΈΠ½ΡƒΡ‚ΠΊΠ° Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹ Π² тСкстС ΠΏΡ€ΠΎ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π Π°Π· Π²Ρ‹ здСсь β€” ΠΏΠΎΡ…ΠΎΠΆΠ΅, Π²Ρ‹ Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ боится ΠΏΠΎΠΊΠΈΠ΄Π°Ρ‚ΡŒ ΡƒΡŽΡ‚Π½ΡƒΡŽ Ρ…ΠΎΠ±Π±ΠΈΡ‡ΡŒΡŽ Π½ΠΎΡ€Ρƒ ΠΈ ΠΏΠΎΠΊΠΎΡ€ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅ для сСбя. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Joker (25-28 ноября, ΠΎΠ½Π»Π°ΠΉΠ½) навСрняка Π±ΡƒΠ΄Π΅Ρ‚ интСрСсноС для вас β€” ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сами ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° сайтС.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *