Π Π°Π·Π½ΠΎΠ΅

ВрСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ java: javatalks.ru / Как ΡƒΠ·Π½Π°Ρ‚ΡŒ врСмя Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹?

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Java ΠΈ C++: тСст Π½Π° быстродСйствиС | Java World

Π’ Ρ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π°, ΠΊΠΎΠ³Π΄Π° всС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java прСдставляли собой ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, эта тСхнология Π²Ρ‹Π·Ρ‹Π²Π°Π»Π° справСдливыС нарСкания Π·Π° свою Π½ΠΈΠ·ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Но ΠΏΠΎ ΠΏΡ€ΠΎΡˆΠ΅ΡΡ‚Π²ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Ρ€Ρ‹Π½ΠΊΠ΅ появились Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ компиляторы just-in-time (JIT), ΠΈ сСгодня тСсты ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎ Π±Ρ‹ΡΡ‚Ρ€ΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ Java Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… областях практичСски ΡΡ€Π°Π²Π½ΡΠ»Π°ΡΡŒ с C++. ΠΠ°ΠΌΠ΅Ρ‚ΠΈΠ²ΡˆΠΈΠ΅ΡΡ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°Π΄Π΅ΡΡ‚ΡŒΡΡ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π² самоС блиТайшСС врСмя Java Π½Π΅ уступит Π² скорости C++.

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

ΠœΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ провСсти ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ исслСдованиС ΠΈ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, Π² Ρ‡Π΅ΠΌ Java уступаСт C++ (спСциалисты Π»ΡŽΠ±ΡΡ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ эти Π΄Π²Π° языка). Π‘Ρ‹Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Java ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ характСристики быстродСйствия ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° Java ΠΈ Π½Π° C++.

ΠœΡ‹ Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΡΡ‚Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎ всСм показатСлям, хотя ΠΈ Π½Π΅ Π²Π΅Ρ€ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ C++ окаТСтся Π² нСсколько Ρ€Π°Π· быстрСС. К Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ Π½Π°ΡˆΠ΅ΠΌΡƒ ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΡŽ, ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ практичСски Π½Π΅ ΠΎΡ‰ΡƒΡ‰Π°Π»ΠΎΡΡŒ. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Java Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ уступала этому ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Ρƒ C++, Ρ‡Ρ‚ΠΎ, Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Π»Π΅Π³ΠΊΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ строгой ΠΌΠΎΠ΄Π΅Π»ΠΈ бСзопасности ΠΈ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ «ΡΠ±ΠΎΡ€ΠΊΠΈ мусора».

Π›ΡŽΠ±ΠΎΠ΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ языка слСдуСт Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π² строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ контСкстС. Π‘ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° появлСния Java ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΠΆΠ΅ Π½Π΅ΠΌΠ°Π»ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ это врСмя Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½ΠΎ Π²ΠΏΡƒΡΡ‚ΡƒΡŽ. НСслучайно сСгодня ΠΏΠΎ ΡƒΡ€ΠΎΠ²Π½ΡŽ быстродСйствия этогот язык Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв сравним с C++ (Π° C++ славится своСй высокой ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ).

ВСсты ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Π±ΠΈΡ‚Ρ‹ Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹:

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС: Visual C++ 5.0 ΠΈ Sun JDK 1.1.5.

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠΎΠ΄ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ понимаСтся комбинация процСссора ΠΈ ОБ. НапримСр, ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ ОБ Windows NT ΠΈ процСссора Intel, ОБ Linux ΠΈ процСссора Intel ΠΈΠ»ΠΈ ΠΆΠ΅ ОБ Linux ΠΈ процСссора Digital Alpha.

Π—ΠΠ“Π Π£Π—ΠšΠ Π˜Π‘ΠŸΠžΠ›ΠΠ―Π•ΠœΠžΠ“Πž ΠšΠžΠ”Π

ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ прилоТСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ сначала Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько исходных Ρ„Π°ΠΉΠ»ΠΎΠ². ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€/ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ транслируСт исходный ΠΊΠΎΠ΄ Π² исполняСмый. Π’ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ исполняСмый ΠΊΠΎΠ΄. На ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ исполняСмый ΠΊΠΎΠ΄ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° исполняСмого ΠΊΠΎΠ΄Π°: Java ΠΏΡ€ΠΎΡ‚ΠΈΠ² C++

Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° находится Π½Π° локальном дискС, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°ΠΆΠ΅ слоТного прилоТСния Π½Π΅ Π·Π°ΠΉΠΌΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Если ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° хранится Π½Π° Web-ΡƒΠ·Π»Π΅ Π² Internet ΠΈΠ»ΠΈ Π² ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ сСти intranet, Ρ€Π°Π·ΠΌΠ΅Ρ€ исполняСмого ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ рСсурсы Java Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшС мСста Π½Π° дискС ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ C++ ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ ΠΈΠ· Internet ΠΈ intranet Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС. ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ скорости Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ исполняСмого ΠΊΠΎΠ΄Π° ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Π Π°Π·ΠΌΠ΅Ρ€ исполняСмого ΠΊΠΎΠ΄Π°

Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Windows NT, написанныС Π½Π° C++, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π½Π° дискС Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большС мСста, Ρ‡Π΅ΠΌ исполняСмыС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Java. На Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ исполняСмого ΠΊΠΎΠ΄Π° ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ влияниС Ρ‚Ρ€ΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ€Π°:

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ исполняСмого ΠΊΠΎΠ΄Π° C++ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΊΠΎΠ΄ΠΎΠΌ Java ΠΏΠΎΡ‡Ρ‚ΠΈ Π² Π΄Π²Π° Ρ€Π°Π·Π°.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, тСхнология Java прСдусматриваСт Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ использованиС ряда Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, содСрТащих матСматичСскиС ΠΈ сСтСвыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, классы для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с составными элСмСнтами ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java (JVM) встроСна ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° этих Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π’ C++ ΠΆΠ΅, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ интСрфСйсы ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (API), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. К соТалСнию, Ссли программист Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ имСя доступа ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ API C++, Π΅ΠΌΡƒ придСтся самому Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для своСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π²ΠΎΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡƒΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Π’ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ Java входят ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с графичСскими ΠΈ Π·Π²ΡƒΠΊΠΎΠ²Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, записанными Π² сТатом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ, Π² частности, графичСскиС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Joint Photographic Expert Group (JPEG) ΠΈ Graphics Interchange Format (GIF), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π°ΡƒΠ΄ΠΈΠΎΡ„ΠΎΡ€ΠΌΠ°Ρ‚ AU. БрСдства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° C++ для Windows NT ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСсТатыС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹: bitmap (BMP) для ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ wave (WAV) для Π°ΡƒΠ΄ΠΈΠΎΡ„Π°ΠΉΠ»ΠΎΠ². Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π° порядок ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ графичСских Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π° — Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π°ΡƒΠ΄ΠΈΠΎΡ„Π°ΠΉΠ»ΠΎΠ². Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ графичСских ΠΈ Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ классов.

Π˜Π·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°

Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° C++, ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ выполнСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ». Π’ срСдС Win32 имССтся Π΄Π²Π° способа связи с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ DLL: статичСский ΠΈ динамичСский. БтатичСски связанныС DLL (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв) Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ случаС динамичСского связывания Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ DLL Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΠΎ запросу. Однако Ρ‚Π°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΌΠ΅Π½Π΅Π΅ популярСн, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ написаниС ΠΊΠΎΠ΄Π° динамичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ обращСния ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΌ функциям Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… усилий.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ сущСствуСт способов ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостности динамичСски связанной DLL Π½Π° этапС выполнСния. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±Π΅Π· Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ нСльзя Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, измСнялась Π»ΠΈ DLL Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НаконСц, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ с ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ диска, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒ. РСализация Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π² автоматичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Java способСн Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ классы ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости. Рассмотрим, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ тСкстовый процСссор со встроСнным тСзаурусом, орфографичСским ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ ΠΈ срСдствами создания ΠΈ экспорта ΠΏΠΎΡ‡Ρ‚Ρ‹. РСализация Π΄Π°Π½Π½Ρ‹Ρ… возмоТностСй ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π² любой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ лишь ΠΌΠ°Π»ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π° срСдств Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Ρ‹Π»Π° написана Π½Π° C++, ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ обязан Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. Π’ случаС, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° написана Π½Π° Java, Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС Π² памяти размСщаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самоС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ), Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° исполняСмого ΠΊΠΎΠ΄Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 1 прСдставлСны Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ протСстированных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΈΡ… рСсурсов. ΠžΠ³Ρ€ΠΎΠΌΠ½Π°Ρ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΊΠΎΠ΄Π° C++ ΠΈ Java ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C++. ΠžΠ±ΡŠΠ΅ΠΌΡ‹ рСсурсов ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ вслСдствиС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ прилоТСния Java Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ со сТатыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ (Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ GIF), Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C++ — с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ bitmap.

Π’Π°Π±Π»ΠΈΡ†Π° 1

Имя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠšΠ±Π°ΠΉΡ‚ (C++/Java)РСсурсы, ΠšΠ±Π°ΠΉΡ‚ (C++/Java)
Simple Loop46/3,9-/-
Memory Allocation34/1,4-/-
Bouncing Globes103/21485/13

Π’Π«ΠŸΠžΠ›ΠΠ•ΠΠ˜Π• ΠŸΠ ΠžΠ“Π ΠΠœΠœΠΠ«Π₯ Π˜ΠΠ’Π‘Π’Π Π£ΠšΠ¦Π˜Π™

ПослС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ исполняСмого ΠΊΠΎΠ΄Π° процСссор Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ инструкции. ΠŸΡ€ΠΈ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C++ исполняСмый Ρ„Π°ΠΉΠ» содСрТит Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ инструкции процСссора Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Для пСрСноса прилоТСния Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ потрСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ» ΠΏΡƒΡ‚Π΅ΠΌ пСрСкомпиляции исходного ΠΊΠΎΠ΄Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, особСнности ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²Π½ΠΎΡΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ измСнСния Π² исходный ΠΊΠΎΠ΄. Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹Π΅ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Π΅ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ компилятора Java, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ процСссором Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ прСобразования Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ возлагаСтся Π½Π° JVM. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ двумя способами: с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ посрСдством компилятора just-in-time (JIT).

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… инструкций: Java ΠΏΡ€ΠΎΡ‚ΠΈΠ² C++

Π£ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° Java, Π½Π΅ слишком Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ рСпутация. Π˜Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ заставляСт вспомнит ΠΎ старых JVM, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… интСрпрСтация Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Π±Ρ‹Π»Π° СдинствСнным способом выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… инструкций.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² нСсколько Ρ€Π°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ исполняСмого ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ C++, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π² Ρ…ΠΎΠ΄Π΅ выполнСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ Π½Π΅ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½Ρ‹ΠΌ расходам. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» состоит ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ инструкций. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ JVM снова ΠΈ снова ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, ΠΏΡ€ΠΈ этом Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ довольно ΠΌΠ½ΠΎΠ³ΠΎ процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Но ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ Ρ€Π°Π±ΠΎΡ‚Π° старых JVM, ΡƒΠΆΠ΅ уходят Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ΅. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин Java оснащаСтся JIT-компиляторами. Π­Ρ‚ΠΈ компиляторы Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‚ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ сразу вСсь исходный Ρ„Π°ΠΉΠ». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ трансляции ΠΊΠ°ΠΆΠ΄ΠΎΠΉ инструкции Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… компиляторов

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ C++ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… частСй ΠΊΠΎΠ΄Π° ΠΏΡƒΡ‚Π΅ΠΌ выявлСния нСэффСктивных участков ΠΈ ΠΈΡ… ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ прСобразования. Π­Ρ‚ΠΎΡ‚ процСсс носит Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ компилятор способСн Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ Π½Π΅Π±Ρ€Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ программиста ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° «ΡΡ‚атичСскиС» вычислСния. Под «ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΌΠΈ» вычислСниями понимаСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ нСзависимо ΠΎΡ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ всСгда являСтся константа.

Распознав Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, компилятор Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π΅ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Ρ†ΠΈΠΊΠ»Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ константы вычисляСтся Π΅Ρ‰Π΅ Π΄ΠΎ Π²Ρ…ΠΎΠ΄Π° Π² Ρ†ΠΈΠΊΠ» ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ, сокращая врСмя выполнСния ΠΈ Π½Π΅ измСняя Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ называСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Для Π΅Π³ΠΎ выполнСния компилятору Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСсколько ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ² ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ всС инструкции Ρ†ΠΈΠΊΠ»Π°. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ пСрСмСщСния выраТСния всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ†ΠΈΠΊΠ»Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹, ΠΈ компилятор обязан ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ любой ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ выраТСния являСтся константа.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ JIT-компилятора, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ «Π½Π° Π»Π΅Ρ‚Ρƒ». ВСхнология JIT-компилятора позволяСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» классов Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, СдинствСнная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ обрабатываСмая JIT-компилятором ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Java ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ C++ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Ρ€Π°Π·Π½ΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, — это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ трансляции Ρ„Π°ΠΉΠ»Π° классов; ΠΎΠ½Π° ΠΆΠ΅, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠžΠ±Ρ‰Π΅Π΅ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΉ Π² сСбя большоС количСство классов, складываСтся ΠΈΠ· Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ трСбуСтся Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ этих классов, ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ процСссором Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π’ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ классы, поэтому Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ всСгда ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΈΠΆΠ΅ Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° нСпосрСдствСнноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

На Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ этапС Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π²ΡˆΠΈΡ… компиляторы JIT, ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ классы слСдуСт ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π° ΠΊΠ°ΠΊΠΈΠ΅ — Π½Π΅Ρ‚. Π­Ρ‚ΠΎ зависСло ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ часто ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ классы Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ВпослСдствии ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π°Π»ΠΈΡΡŒ ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΈ компиляторы стали Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь исходный ΠΊΠΎΠ΄, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Ρ‰Π΅Π΅ врСмя выполнСния ΠΏΡ€ΠΈ этом практичСски Π½Π΅ измСнялось.

ВСория ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

ВСорСтичСски скорости выполнСния Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Java, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ JIT-компилятором, ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π‘++ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сущСствСнно Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π²Π° Ρ„Π°ΠΊΡ‚ΠΎΡ€Π°, ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… сущСствСнноС влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ инструкции Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ процСссора. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния этих ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π½ΠΎ врСмя ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈ этом Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. Если ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Π΅ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ JIT-компилятора ΠΈ компилятора C++, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ количСства Ρ‚Π°ΠΊΡ‚ΠΎΠ² процСссора, быстродСйствиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Java ΠΈ C++ оказываСтся практичСски ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ. (Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС всС зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько Ρ…ΠΎΡ€ΠΎΡˆΠΎ компилятор ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ исполняСмый ΠΊΠΎΠ΄ ΠΏΠΎ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ быстродСйствия.)

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ количСство ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ² компилятора, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… участков ΠΊΠΎΠ΄Π°. Π’ рассмотрСнном Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ «ΡΡ‚атичСских» вычислСний, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, измСняСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния ΠΈΠ»ΠΈ Π½Π΅Ρ‚, компилятору, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, потрСбуСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ всС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°.

Один ΠΈΠ· Π²ΠΈΠ΄ΠΎΠ² Π±ΠΎΠ»Π΅Π΅ слоТной ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ — это устранСниС Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½ΠΈ ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… условиях. Если Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚, ΠΎΠ½ΠΈ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² исполняСмый ΠΊΠΎΠ΄.

УстранСниС Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ сущСствСнному ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡŽ быстродСйствия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€ΠΈ этом Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ увСличиваСтся ΠΈ врСмя компиляции. НСобходимо ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ появлСниС Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° — это Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ошибок программиста. ΠžΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, облСгчая Ρ‚Π΅ΠΌ самым Π·Π°Π΄Π°Ρ‡Ρƒ компилятора.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС Π² зависимости ΠΎΡ‚ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹ΡˆΠ° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚ всС Π²ΠΈΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ быстродСйствиС Π½Π° 10-15 % ΠΏΡ€ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚Π°Ρ….

Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ позволяСт ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΅Ρ‰Π΅ Π½Π° 5 %, ΠΎΠ΄Π½Π°ΠΊΠΎ это обойдСтся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΡ€ΠΎΠΆΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2 ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выполнСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ Java ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° C++. НСтрудно Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ отсутствии JIT-компилятора ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Java Π² Ρ‚Ρ€ΠΈ-Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ€Π°Π·Π° уступаСт этому ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ для C++.

Π’Π°Π±Π»ΠΈΡ†Π° 2

Π’Π΅ΡΡ‚ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅Π’Ρ€Π΅ΠΌΡ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C++, сСк.ВрСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java (JIT-
компилятор), сСк.
ВрСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java (ΠΈΠ½Ρ‚Π΅Ρ€-
ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°), сСк.
ЦСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅Π’ Ρ†ΠΈΠΊΠ»Π΅ 10 тыс. Ρ€Π°Π· Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ опСрация цСлочислСнного дСлСния.1,81,84,8
ΠΠ΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄Π’ Ρ†ΠΈΠΊΠ»Π΅ 10 ΠΌΠ»Π½. Ρ€Π°Π· Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΎΡΡŒ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅3,73,79,5
ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ цСлочислСнного дСлСнияВ Ρ†ΠΈΠΊΠ» Π±Ρ‹Π»Π° встроСна ΠΎΠ΄Π½Π° исполняСмая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ 10 ΠΌΠ»Π½. Ρ€Π°Π· Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ5,45,720
Π”Π΅Π»Π΅Π½ΠΈΠ΅ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉΠ’ Ρ†ΠΈΠΊΠ»Π΅ 10 ΠΌΠ»Π½. Ρ€Π°Π· Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ1,61,68,7
БтатичСский ΠΌΠ΅Ρ‚ΠΎΠ΄Π’ Ρ†ΠΈΠΊΠ»Π΅ 10 ΠΌΠ»Π½. Ρ€Π°Π· вызывался статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ цСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅1,81,86,0
ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Π’ Ρ†ΠΈΠΊΠ»Π΅ 10 ΠΌΠ»Π½. Ρ€Π°Π· вызывался ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ цСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅1,81,810
Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄*Π’ Π΄Π°Π½Π½ΠΎΠΌ тСстС 10 ΠΌΠ»Π½. Ρ€Π°Π· вызывался Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ цСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅1,81,810
Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ Ρ‚ΠΈΠΏΠ° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния (RTTI)Π’ Π΄Π°Π½Π½ΠΎΠΌ тСстС 10 ΠΌΠ»Π½. Ρ€Π°Π· вызывался Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ опСрация привСдСния Ρ‚ΠΈΠΏΠΎΠ²114,312
Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ° ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ Ρ‚ΠΈΠΏΠ° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния (RTTI)Π’ Π΄Π°Π½Π½ΠΎΠΌ тСстС 10 ΠΌΠ»Π½. Ρ€Π°Π· вызывался Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ опСрация привСдСния Ρ‚ΠΈΠΏΠΎΠ²-**-**-**
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ:
* ВСст ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Java всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.
** АварийноС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅

Π’ ΠΏΠΎΠ»Π½ΠΎΠΌ соотвСтствии с тСорСтичСскими исслСдованиями быстродСйствиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Java, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… JIT-компилятором, практичСски Π½Π΅ отличаСтся ΠΎΡ‚ этого показатСля для ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ C++. ЕдинствСнноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ — Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ привСдСния Ρ‚ΠΈΠΏΠΎΠ², Π³Π΄Π΅ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ C++ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ прСвосходит ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Java.

Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ, вслСдствиС Ρ‡Π΅Π³ΠΎ часто приходится Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ прСобразования Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Π² Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ. Данная опСрация называСтся ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠΎΠ².

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ провСряСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ прСобразования Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Π² Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ (идСнтификация Ρ‚ΠΈΠΏΠ° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния — run-time type identification, RTTI). ΠŸΡ€ΠΈ эксплуатации слоТных систСм, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ RTTI, часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ошибки. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сниТаСт ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ всСй систСмы ΠΈ ΠΏΠΎΠ΄Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΎΠ²Π΅Ρ€ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ программистов, ΠΏΠΈΡˆΡƒΡ‰ΠΈΡ… Π½Π° C++, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ RTTI, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ быстродСйствиС. ВСхнология Java Π½Π΅ позволяСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ систСмы бСзопасности. Наши тСсты Π΅Ρ‰Π΅ Ρ€Π°Π· продСмонстрировали, насколько ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ RTTI Π·Π°ΠΌΠ΅Π΄Π»ΡΡŽΡ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π ΠΠ‘ΠŸΠ Π•Π”Π•Π›Π•ΠΠ˜Π• ПАМЯВИ

Для хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ выполнСния вычислСний ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ эффСктивно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉΡΡ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ области памяти ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚, эта ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ освобоТдСна ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π° систСмС. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ выдСлСния памяти C++ ΠΈ Java ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ. Π§Ρ‚ΠΎ касаСтся освобоТдСния, здСсь ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ отличия. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C++ обязаны явно ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠžΡ‡Π΅Π½ΡŒ часто ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ C++ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ошибки, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Π΅ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ программист Π·Π°Π±Ρ‹Π» явно ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π­Ρ‚Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ «Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ся» ΠΈ становится нСдоступной Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния.

Π’ срСдС Java Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ встроСнный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ освобоТдСния памяти, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ «ΡΠ±ΠΎΡ€ΠΊΠΎΠΉ мусора». Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ автоматичСски опрСдСляСт ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° конкрСтная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти большС Π½Π΅ Π½ΡƒΠΆΠ½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, послС Ρ‡Π΅Π³ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ возвращаСтся систСмС.

РаспрСдСлСниС памяти: Java ΠΏΡ€ΠΎΡ‚ΠΈΠ² C++

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

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ фактичСски Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΎΡ‚ ΡƒΡ‚Π΅Ρ€ΠΈ памяти. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ошибки, связанныС с ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ областСй памяти, ΠΎΡ‡Π΅Π½ΡŒ часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π² слоТных систСмах, ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ поиска Ρ‚Π°ΠΊΠΈΡ… ошибок ΠΈ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ изучСния ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сокращаСтся Ρ†ΠΈΠΊΠ» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ нСдостаток слоТных систСм — фрагмСнтация памяти, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π°Ρ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ многочислСнных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ выдСлСния ΠΈ освобоТдСния памяти ΠΈ сущСствСнно ΡΠ½ΠΈΠΆΠ°ΡŽΡ‰Π°Ρ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния прилоТСния. Π₯ΠΎΡ€ΠΎΡˆΠΎ написанный «ΡΠ±ΠΎΡ€Ρ‰ΠΈΠΊ мусора» Java способСн, эффСктивно пСрСраспрСдСляя ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Java ΠΈ C++ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ распрСдСлСния памяти, характСрная для Java, достигаСтся Π·Π° счСт сниТСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

На Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ освобоТдСниС памяти для 10 ΠΌΠ»Π½. 32-разрядных Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° C++ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ 0,812 сСк., Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Java — 1,592 сСк. На основании Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ…ΠΎΡ€ΠΎΡˆΠΎ прослСТиваСтся сниТСниС быстродСйствия Java. И всС ΠΆΠ΅ нСсмотря Π½Π° ΠΎΠ³Ρ€ΠΎΠΌΠ½ΡƒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΡƒΡŽ «ΡΠ±ΠΎΡ€Ρ‰ΠΈΠΊΠΎΠΌ мусора», ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Java Π²ΠΏΠΎΠ»Π½Π΅ соизмСрима с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ C++.

Π”ΠžΠ‘Π’Π£ΠŸ К Π‘Π˜Π‘Π’Π•ΠœΠΠ«Πœ Π Π•Π‘Π£Π Π‘ΠΠœ

Помимо распрСдСлСния памяти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ доступ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ систСмным слуТбам, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ Π²Ρ‹Π²ΠΎΠ΄ графичСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π·Π²ΡƒΠΊΠ° ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°ΠΌΠΈ. Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° C++ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ систСмным функциям ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ интСрфСйсов ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (API). КаТдой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ соотвСтствуСт свой API, поэтому ΠΏΡ€ΠΈ пСрСносС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ приходится ΠΏΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ сущСствСнныС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ систСмным слуТбам любой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ СдинствСнного API. КаТдая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ сходныС интСрфСйсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° обращСния Java Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ рСсурсы.

Доступ ΠΊ систСмным рСсурсам: Java ΠΏΡ€ΠΎΡ‚ΠΈΠ² C++

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС прСимущСства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ систСмным слуТбам, ΠΎΠΏΡ€Π°Π²Π΄Ρ‹Π²Π°ΡŽΡ‚ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… интСрфСйсов Java. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ систСмныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ быстро, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C++.

ЕдинствСнным ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ· этого ΠΏΡ€Π°Π²ΠΈΠ»Π° являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ срСдства, эквивалСнтныС функциям API Java, ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π½Π΅ Π½Π° всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…. Π’ частности, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² Macintosh Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, поэтому ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ API Java Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Macintosh.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

ΠœΡ‹ протСстировали ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΡƒΡŽ извСстным спСциалистом Π² области Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠ° Π”ΠΆΠ΅Π΅ΠΌ Π‘Π°Ρ€Ρ‚ΠΎΡ‚ΠΎΠΌ. БыстродСйствиС Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΅Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π°ΠΏΠΏΠ»Π΅Ρ‚Π° Java Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°Π»ΠΎΡΡŒ ΠΎΡ‚ этого показатСля ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанной ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ срСдств Win32 SDK.

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ Π΄Π²ΡƒΡ… Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… постулатов.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Java зависит ΠΎΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ JVM. ВСстовая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠ°Ρ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Internet Explorer 4.0 ΠΈ Netscape Communicator Π² срСдС Windows NT, Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°Π»Π°ΡΡŒ высокой ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ выполнСния. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π»ΠΈΡΡŒ Π½Π° экранС нССстСствСнно, с высокой Π΄ΠΈΡΠΊΡ€Π΅Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ. Однако стоило Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ Π² срСдС Windows 95, ΠΊΠ°ΠΊ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ стала Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ.

Π Π°Π·Π½ΠΈΡ†Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ, ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ быстродСйствиС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² Π² срСдС Windows 95. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ различия Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Π² ΠΎΠ±Π΅ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΠ°ΠΊΠ΅Ρ‚ JDK for Win32, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ†ΠΈΠ΅ΠΉ Sun, являСтся общСпринятым стандартом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обязаны ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ всС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ ΠΈ JVM.

ΠšΠžΠœΠŸΠ•Π’Π•ΠΠ’ΠΠžΠ‘Π’Π¬ Π ΠΠ—Π ΠΠ‘ΠžΠ’Π§Π˜ΠšΠ — Π“ΠΠ ΠΠΠ’Π˜Π― Π’Π«Π‘ΠžΠšΠžΠ™ ΠŸΠ ΠžΠ˜Π—Π’ΠžΠ”Π˜Π’Π•Π›Π¬ΠΠžΠ‘Π’Π˜

БоздаСтся Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ, ΡƒΠΏΡ€Π΅ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ Java Π² нСдостаточной ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ пСрСвСдутся. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Ρ‚ΠΎ ΠΆΠ΅ самоС наблюдалось ΠΏΡ€ΠΈ появлСнии языков Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ поколСния, структурного ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. КаТдая новая тСхнология ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½ΠΎ ΠΈ заставляСт ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ дисциплину. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Java — это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Π΅Π³ΠΎ нСприятиС ощущаСтся со стороны Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ осознал прСимущСств Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹.

ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½Π°ΠΌΠΈ Π°Π½Π°Π»ΠΈΠ· ΠΏΠΎΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ с тСорСтичСской, Ρ‚Π°ΠΊ ΠΈ с практичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ C++ ΠΈ Java Π½Π΅ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ. А Ссли такая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΈ сущСствуСт, программист, ΠΏΠΈΡˆΡƒΡ‰ΠΈΠΉ Π½Π° Java, оказываСтся Π² Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° C++.

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

ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ лишь ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ эти прСимущСства:

ВСория ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Java: ДинамичСская компиляция ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ интСрпрСтация испытаний ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для динамичСски ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков программирования, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Java, являСтся Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, Ρ‡Π΅ΠΌ для статичСски ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ C ΠΈΠ»ΠΈ C++. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ сСрии ВСория ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Java Brian Goetz ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ нСсколько ΠΈΠ· мноТСства ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ динамичСская компиляция ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ тСст ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

http://www-128.ibm.com/developerworks/java/library/j-jtp12214/

Bertrand Portier (brian@quiotix. com)
Π’Π΅Π΄ΡƒΡ‰ΠΈΠΉ ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚, Quiotix
21 Dec, 2004

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

1 ДинамичСская компиляция — краткая история
2Β Π’Π°ΠΊ ΠΊΠ°ΠΊΠΎΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ всС это ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊ тСсту ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ?
3Β Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ «ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎ» ΠΊΠΎΠ΄Π°
4Β Π’Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠ°
5 ДинамичСская дСоптимизация
6Β Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
7 РСсурсы
8 Об Π°Π²Ρ‚ΠΎΡ€Π°Ρ…

ДинамичСская компиляция — краткая история

ΠŸΡ€ΠΎΡ†Π΅ΡΡ компиляции Java-прилоТСния отличаСтся ΠΎΡ‚ процСсса компиляции статичСски ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков программирования, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π‘ ΠΈΠ»ΠΈ Π‘++. БтатичСский компилятор ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄ нСпосрСдствСнно Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ примСнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… компиляторов. Java-компилятор ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный Java-ΠΊΠΎΠ΄ Π² пСрСносимыС Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Ρ‹ JVM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ для JVM «ΠΈΠ½ΡΡ‚рукциями Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹». Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ статичСских компиляторов javac выполняСт ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ — оптимизация, проводимая статичСскими компиляторами, выполняСтся Π²ΠΎ врСмя исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ поколСния JVM Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ. JVM ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»Π° Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ вмСсто компиляции Π΅Π³ΠΎ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ выполнСния машинного ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, СстСствСнно, Π½Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π» Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ систСма большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ‚Ρ€Π°Ρ‚ΠΈΠ»Π° Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, Π° Π½Π΅ самой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Just-in-time (опСративная) компиляция

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡ Π±Ρ‹Π»Π° Ρ…ΠΎΡ€ΠΎΡˆΠ° для proof-of-concept (Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ ΠΈΠ΄Π΅ΠΈ) Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ JVM сразу ΠΎΠ±Π²ΠΈΠ½ΠΈΠ»ΠΈ Π² ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ поколСния JVM использовали just-in-time (JIT) компиляторы для ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ опрСдСлСнная JIT-Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ всС Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Ρ‹ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ это Π² Π½Π΅Ρ‚ΠΎΡ€ΠΎΠΏΠ»ΠΈΠ²ΠΎΠΌ стилС: JIT ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ code path Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ code path Π±ΡƒΠ΄Π΅Ρ‚ сСйчас Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ (ΠΎΡ‚ΡΡŽΠ΄Π° ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ just-in-time компиляция). Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ ΡΡ‚Π°Ρ€Ρ‚ΠΎΠ²Π°Ρ‚ΡŒ быстрСС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ трСбуСтся Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ„Π°Π·Π° компиляции ΠΏΠ΅Ρ€Π΅Π΄ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Π½Π°Ρ‡Π°Π»ΠΎΠΌ исполнСния ΠΊΠΎΠ΄Π°.

ИспользованиС JIT выглядСло ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Π΅Ρ‰Π°ΡŽΡ‰ΠΈΠΌ, Π½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ нСдостатки. JIT-компиляция устранила Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ (Π·Π° счСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ замСдлСния запуска), Π½ΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΏΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π±Ρ‹Π» посрСдствСнным. Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ замСдлСния ΠΏΡ€ΠΈ запускС Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ JIT-компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ быстрым, Ρ‚.Π΅. ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ. И ΠΏΠ΅Ρ€Π²Ρ‹Π΅ JIT-компиляторы Π±Ρ‹Π»ΠΈ консСрвативны Π² создании встроСнных ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π½Π΅ Π·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊΠΈΠ΅ классы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΏΠΎΠ·Π΄Π½Π΅Π΅.

Π‘ тСхничСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния JIT-Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ. Π’Π΅Ρ€ΠΌΠΈΠ½ JIT часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для обозначСния любой динамичСской компиляции Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° интСрпрСтация Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π°.

ДинамичСская компиляция HotSpot

Π˜ΡΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ процСсс HotSpot ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡŽ, ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ. ВмСсто прСобразования всСх Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ΠΎΠ² Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ HotSpot Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ «Π³ΠΎΡ€ΡΡ‡ΠΈΠΉ» ΠΊΠΎΠ΄, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ΄, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто. Π’ΠΎ врСмя выполнСния ΠΎΠ½ собираСт Π΄Π°Π½Π½Ρ‹Π΅ Π°Π½Π°Π»ΠΈΠ·Π°. Π­Ρ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для опрСдСлСния Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠ΄Π°, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ достаточно часто ΠΈ Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… компиляции. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ часто исполняСмого ΠΊΠΎΠ΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько прСимущСств: Π½Π΅ тратится врСмя Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΊΠΎΠ΄Π°, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Ρ€Π΅Π΄ΠΊΠΎ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ «Π³ΠΎΡ€ΡΡ‡Π΅Π³ΠΎ» ΠΊΠΎΠ΄Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ врСмя Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½ΠΎ Π½Π΅ зря. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, откладывая ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, компилятор ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π°Π½Π°Π»ΠΈΠ·Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π»ΠΈ Π²Ρ‹Π·ΠΎΠ² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

HotSpot поставляСтся с двумя компиляторами: клиСнтским ΠΈ сСрвСрным. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ клиСнтский компилятор. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ сСрвСрный компилятор, ΡƒΠΊΠ°Π·Π°Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -server ΠΏΡ€ΠΈ запускС JVM. Π‘Π΅Ρ€Π²Π΅Ρ€Π½Ρ‹ΠΉ компилятор ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΠΈΠΊΠΎΠ²ΠΎΠΉ скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для «Π΄ΠΎΠ»Π³ΠΎΠΈΠ³Ρ€Π°ΡŽΡ‰ΠΈΡ…» сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠΉ компилятор ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ запуска прилоТСния ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ³ΠΎ объСма памяти, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Π½Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‡Π΅ΠΌ сСрвСрный компилятор, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для компиляции.

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

НСпрСрывная пСрСкомпиляция

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° интСрСсная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ HotSpot — компиляция Π½Π΅ осущСствляСтся ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ «Π²ΡΠ΅ ΠΈΠ»ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ». Code path компилируСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ послС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство Ρ€Π°Π·. Но JVM ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π·Π°Π½ΠΎΠ²ΠΎ с Π±ΠΎΠ»Π΅Π΅ высоким ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Ссли Ρ€Π΅ΡˆΠΈΡ‚, Ρ‡Ρ‚ΠΎ code path являСтся особСнно «Π³ΠΎΡ€ΡΡ‡ΠΈΠΌ» ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠΊΠ°Π·Π°Π» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. JVM ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Ρ‹ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ прилоТСния. Для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ компилятора ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ JVM с Ρ„Π»Π°Π³ΠΎΠΌ -XX:+PrintCompilation, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ заставляСт компилятор (клиСнтский ΠΈΠ»ΠΈ сСрвСрный) ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π²ΠΎ врСмя своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° экран ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ сообщСниС.

Π—Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² стСкС

ΠŸΠ΅Ρ€Π²Π°Ρ вСрсия HotSpot выполняла ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠœΠ΅Ρ‚ΠΎΠ΄ считался «Π³ΠΎΡ€ΡΡ‡ΠΈΠΌ», Ссли ΠΎΠ½ выполнял ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°, ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство Ρ€Π°Π· (10000 Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии HotSpot). Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ»ΠΎΡΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ счСтчика ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ значСния ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°. Однако послС компиляции ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ происходил Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄ — компилированная вСрсия ΠΌΠΎΠ³Π»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этого Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях компилированная вСрсия Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ использовалась, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² случаС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉ интСнсивныС вычислСния ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ всС вычислСния производятся ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π’ Ρ‚Π°ΠΊΠΎΠΉ ситуации Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скомпилирован, Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½ΠΈ Ρ€Π°Π·Ρƒ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Π‘ΠΎΠ»Π΅Π΅ свСТиС вСрсии HotSpot ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ on-stack replacement (OSR), для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ (ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΎΠ΄Π½ΠΎΠΉ вСрсии ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ) Π² сСрСдинС Ρ†ΠΈΠΊΠ»Π°.

Π’Π°ΠΊ ΠΊΠ°ΠΊΠΎΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ всС это ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊ тСсту ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ?

Π― ΠΎΠ±Π΅Ρ‰Π°Π» Π²Π°ΠΌ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΎ тСстах ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ ΠΏΠΎΠΊΠ° Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΡƒΡ€ΠΎΠΊ ΠΏΠΎ истории ΠΈ пСрСсказ Π±Π΅Π»Ρ‹Ρ… ΠΊΠ½ΠΈΠ³ HotSpot ΠΎΡ‚ Sun. ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ отступлСния являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Π΅Π· понимания процСсса динамичСской компиляции практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ тСсты ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для Java-классов. (Π­Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ довольно нСпросто Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ динамичСской компиляции ΠΈ JVM-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.)

ΠŸΠΈΡΠ°Ρ‚ΡŒ микротСсты ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС, Ρ‡Π΅ΠΌ для C-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ способом опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ А быстрСС Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π‘, являСтся написаниС малСнького тСста ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, часто Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ микротСстом ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π±Π»Π°Π³ΠΎΡ€Π°Π·ΡƒΠΌΠ½ΠΎ. Научный ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ нСзависимого исслСдования! Π£Π²Ρ‹. НаписаниС (ΠΈ интСрпрСтация) тСстов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ являСтся Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠΉ ΠΈ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ для языков с динамичСской компиляциСй, Ρ‡Π΅ΠΌ для языков со статичСской компиляциСй. НичСго Π½Π΅Ρ‚ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ Π² ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ конструкции ΠΏΡƒΡ‚Π΅ΠΌ написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ. Но Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв написанныС Π½Π° Java микротСсты Π½Π΅ ΠΏΠΎΠΊΠ°ΠΆΡƒΡ‚ Π²Π°ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ.

Π§Ρ‚ΠΎ касаСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° C, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ характСристиках ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π΄Π°ΠΆΠ΅ Π½Π΅ запуская Π΅Π΅, Π° просто посмотрСв Π½Π° ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ компилятором инструкции ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, Π° ΠΈΡ… Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ характСристики Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС достаточно Ρ…ΠΎΡ€ΠΎΡˆΠΎ понятны. (Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ патологичСскиС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Ρ…ΡƒΠΆΠ΅, Ρ‡Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΎΡ‚ просмотра машинного ΠΊΠΎΠ΄Π°, ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ отсутствия постоянного прСдсказания Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ отсутствия кэша. Но Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ C-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, просмотрСв Π΅Π΅ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.)

Если компилятор собираСтся ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ считаСт Π΅Π³ΠΎ нСсущСствСнным (обычная ситуация с тСстами ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ это Π² сгСнСрированном машинном ΠΊΠΎΠ΄Π΅ — Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. И Π²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ C-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя, ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΎ Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, HotSpot JIT пСриодичСски ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Java-Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ эта пСрСкомпиляция ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ врСмя послС накоплСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ количСства Π΄Π°Π½Π½Ρ‹Ρ… для Π°Π½Π°Π»ΠΈΠ·Π°, ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π½ΠΎΠ²Ρ‹Ρ… классов ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ code path, Π΅Ρ‰Π΅ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² разряд Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… классов. Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΡ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΈ постоянной пСрСкомпиляции ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌΠΈ ΠΈ ΠΎΠ±ΠΌΠ°Π½Ρ‡ΠΈΠ²Ρ‹ΠΌΠΈ, ΠΈ ΠΎΡ‡Π΅Π½ΡŒ часто Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Java-ΠΊΠΎΠ΄ довольно ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя (я Π²ΠΈΠ΄Π΅Π» анСкдотичСскиС ситуации ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ послС часов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π΄Π½Π΅ΠΉ, ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹) Π΄ΠΎ получСния ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ «ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎ» ΠΊΠΎΠ΄Π°

Одной ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ написания Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ тСстовой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ являСтся ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ компилятором «ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎ» ΠΊΠΎΠ΄Π° — ΠΊΠΎΠ΄Π°, Π½Π΅ Π²Π»ΠΈΡΡŽΡ‰Π΅Π³ΠΎ Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ тСстов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ часто Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π½Π° экран; это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ»ΠΈ вСсь ваш ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ Π±Π΅Π· вашСго Π²Π΅Π΄ΠΎΠΌΠ°, ΠΈ с этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅. Π’ частности, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ микротСсты Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -server вмСсто -client, Π½Π΅ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ сСрвСрный компилятор быстрСС (хотя Ρ‡Π°Ρ‰Π΅ всСго Ρ‚Π°ΠΊ ΠΈ Π΅ΡΡ‚ΡŒ), Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ сСрвСрный компилятор Π±ΠΎΠ»Π΅Π΅ приспособлСн ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² «ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎ» ΠΊΠΎΠ΄Π°. К соТалСнию, такая оптимизация «ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎ» ΠΊΠΎΠ΄Π°, ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‰Π°Ρ Ρ€Π°Π±ΠΎΡ‚Ρƒ вашСй тСстовой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ оптимизируя Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ), Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, которая Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚.

Π‘Ρ‚Ρ€Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

Листинг 1 содСрТит ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° тСста ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ с Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‰ΠΈΠΌ Π±Π»ΠΎΠΊΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» взят ΠΈΠ· тСста для измСрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π½ΠΎ вмСсто этого измСряСт Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. (Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±Ρ‹Π» позаимствован ΠΈΠ· ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΈ JavaOne 2003 «The Black Art of Benchmarking». Π‘ΠΌ. Ρ€Π°Π·Π΄Π΅Π» РСсурсы.)

Листинг 1. ВСст ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, искаТСнный Π½Π΅ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹ΠΌ «ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ΠΌ» ΠΊΠΎΠ΄ΠΎΠΌ

public class StupidThreadTest {
Β  public static void doSomeStuff() {
Β Β Β  double uselessSum = 0;
Β Β Β  for (int i = 0; i < 1000; i++) {
Β Β Β Β Β  for (int j = 0; j < 1000; j++) {
Β Β Β Β Β Β Β  uselessSum += (double) i + (double) j;
Β Β Β Β Β  }
Β Β Β  }
Β  }

Β 

public static void main(String[] args) throws InterruptedException {
Β Β Β  doSomeStuff();

Β Β Β 

int nThreads = Integer. parseInt(args[0]);
Β Β Β  Thread[] threads = new Thread[nThreads];
Β Β Β  for (int i = 0; i < nThreads; i++)
Β Β Β Β Β  threads[i] = new Thread(new Runnable() {
Β Β Β Β Β Β Β  public void run() {
Β Β Β Β Β Β Β Β Β  doSomeStuff();
Β Β Β Β Β Β Β  }
Β Β Β Β Β  });
Β Β Β  long start = System.currentTimeMillis();
Β Β Β  for (int i = 0; i < threads.length; i++)
Β Β Β Β Β  threads[i].start();
Β Β Β  for (int i = 0; i < threads.length; i++)
Β Β Β Β Β  threads[i].join();
Β Β Β  long end = System.currentTimeMillis();
Β Β Β  System.out.println("Time: " + (end - start) + "ms");
Β  }
}

ΠœΠ΅Ρ‚ΠΎΠ΄ doSomeStuff() ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для пороТдСния Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ дСйствиС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ исполнСния StupidThreadBenchmark. Однако компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ вСсь ΠΊΠΎΠ΄ Π² doSomeStuff являСтся «ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ΠΌ», ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ удалСния, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ uselessSum Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° удаляСтся, ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ сам Ρ†ΠΈΠΊΠ», оставив doSomeStuff ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ пустым. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 1 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ StupidThreadBenchmark Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΈ Π½Π° сСрвСрС. ОбС JVM ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ количСства ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π›Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π²ΠΈΠ½ΡƒΡ‚ΠΎ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ JVM сСрвСра Π² 40 Ρ€Π°Π· быстрСС JVM ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ — сСрвСрный компилятор выполняСт Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ doSomeStuff содСрТит ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ «ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ΠΉ» ΠΊΠΎΠ΄. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‚ΡΡ Π½Π° JVM сСрвСра, ускорСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π²Ρ‹ — это просто ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΏΠ»ΠΎΡ…ΠΎ написанного тСста ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π° Π½Π΅ блСстящая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ JVM сСрвСра. Но Ссли Π²Ρ‹ Π±Ρ‹Π»ΠΈ Π½Π΅Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ довольно Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ.

Π’Π°Π±Π»ΠΈΡ†Π° 1. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ StupidThreadBenchmark Π² клиСнтской ΠΈ сСрвСрной JVM

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ потоковВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ JVM клиСнтаВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ JVM сСрвСра
10432
10043510
1000414280
10000424021060

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ (Ρ‚. Π΅. ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅) «ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎ» ΠΊΠΎΠ΄Π° Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΈ тСстировании ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… статичСски ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Однако ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ компилятором большого Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° вашСго ΠΊΠΎΠ΄Π° Π² Ρ‚Π°ΠΊΠΈΡ… прилоТСниях Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Π³Ρ‡Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° сгСнСрированный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ отсутствиС части вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΈ использовании ΠΆΠ΅ динамичСски ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков эта информация Π½Π΅ являСтся для вас лСгкодоступной.

Π’Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠ°

ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ΄ΠΈΠΎΠΌΡ‹ Π₯ Π²Ρ‹, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΅Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ, Π° Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ, вСрсии. (Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π½Π°Ρ‚ΡŒ, насколько быстро X Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.) Для этого ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° «Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠ°» JVM — Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ вашСго дСйствия достаточноС количСство Ρ€Π°Π·, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ компилятор ΠΈΠΌΠ΅Π» достаточно Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΠ» ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ.

Для ΠΏΠ΅Ρ€Π²Ρ‹Ρ… JIT ΠΈ динамичСских компиляторов Π±Π΅Π· замСщСния Π² стСкС сущСствовала простая Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° измСрСния ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ количСство Ρ€Π°Π·. Если число Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π»ΠΎ ΠΏΠΎΡ€ΠΎΠ³ срабатывания ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ компиляции ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, фактичСски ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΠ»ΠΈΡΡŒ ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ, Π° всС ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ компиляции Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° измСрСния.

Π‘ соврСмСнными динамичСскими компиляторами это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ запускаСтся Π² ΠΌΠ΅Π½Π΅Π΅ прСдсказуСмоС врСмя, JVM ΠΏΠΎ своСму ТСланию ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠ΄ с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ вСрсии Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ, Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ code path ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π°. Если Π²Ρ‹ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ врСмя этих событий, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎ ΠΈΡΠΊΠ°Π·ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ваши Ρ… ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ.

На рисункС 1 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… искаТСний ΠΈΠ·-Π·Π° нСпрСдсказуСмой динамичСской компиляции. Допустим, Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ 200000 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Ρ†ΠΈΠΊΠ»Π° ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² 10 Ρ€Π°Π· быстрСС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ. Если компиляция запускаСтся Π·Π° 200000 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, Π²Ρ‹ измСряСтС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (шкала Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (a)). Если компиляция запускаСтся Π·Π° 100000 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΎΠ±Ρ‰Π΅Π΅ врСмя выполнСния состоит ΠΈΠ· Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния 100000 ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ плюс врСмя компиляции (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ) плюс врСмя выполнСния ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ (шкала Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (b)). Если компиляция запускаСтся Π·Π° 20000 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΎΠ±Ρ‰Π΅Π΅ врСмя состоит ΠΈΠ· 20000 ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ плюс врСмя компиляции плюс 180000 ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ (шкала Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (c)). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅,ΠΊΠΎΠ³Π΄Π° запускаСтся компилятор, Π° Ρ‚Π°ΠΊΠΆΠ΅ врСмя компиляции, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ сильно ΠΈΡΠΊΠ°ΠΆΠ°Ρ‚ΡŒΡΡ. Π’ зависимости ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции ΠΈ Ρ‚ΠΎΠ³ΠΎ, насколько ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ быстрСС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ, нСбольшиС измСнСния количСства ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ большим различиям Π² ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ «ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ».

Π˜Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊΠΎΠ³ΠΎ объСма Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠΈ достаточно? Π’Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅. Π›ΡƒΡ‡ΡˆΠ΅Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ — Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ваш тСст с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -XX:+PrintCompilation, Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ запуска компилятора, Π·Π°Ρ‚Π΅ΠΌ Ρ€Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ измСрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вся компиляция происходила Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ ΠΈ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π»Π°ΡΡŒ Π² сСрСдинС ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°.

НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΎ сборкС мусора

Как Π²Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, для получСния Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² измСрСния Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π΄Π°ΠΆΠ΅ большСС количСство Ρ€Π°Π·, Ρ‡Π΅ΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ достаточно для Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠΈ JVM. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ссли Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ любоС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ΄ это Π΄Π΅Π»Π°Π΅Ρ‚), ΠΈΠ· Π½ΠΈΡ… создаСтся мусор ΠΈ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ сборщик мусора. Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ сильно ΠΈΡΠΊΠ°Π·ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ — нСбольшоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ количСства ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ сборщика мусора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ искаТаСт ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ «Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ».

Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ тСст с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -verbose:gc, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π½Π° сборку мусора, ΠΈ соотвСтствСнно ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ. Π•Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя, гарантируя ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ большого числа сборок мусора для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ компСнсации дСйствий ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ сборкС мусора.

ДинамичСская дСоптимизация

МногиС ΠΈΠ· стандартных Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² «ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅», Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ встраиваниС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² часто являСтся ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΌ для достиТСния Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈ встраивании Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡƒΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½ΠΎ ΠΈ прСдоставляСтся больший основной Π±Π»ΠΎΠΊ компилятору для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ с Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ «ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°».

Листинг 2 прСдставляСт ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏΠ° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌΠΎΠΉ Ρ‡Π΅Ρ€Π΅Π· встраиваниС. ΠœΠ΅Ρ‚ΠΎΠ΄ outer() Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ inner() с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ null, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ inner() Π½Π΅ выполняСт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий. Но, встраивая Π²Ρ‹Π·ΠΎΠ² ΠΊ inner(), компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ else Π² inner() являСтся «ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ΠΌ» ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΈ Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ else ΠΏΡƒΡ‚Π΅ΠΌ удалСния, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π΄Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ) Π²Ρ‹Π·ΠΎΠ² ΠΊ inner() ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. Если Π±Ρ‹ inner() Π½Π΅ Π±Ρ‹Π» Π±Ρ‹ встроСн, такая оптимизация Π½Π΅ Π±Ρ‹Π»Π° Π±Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°.

Листинг 2. Как встраиваниС ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ «ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎ» ΠΊΠΎΠ΄Π°public class Inline {
Β  public final void inner(String s) {
Β Β Β  if (s == null)
Β Β Β Β Β  return;
Β Β Β  else {
Β Β Β Β Β  // Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слоТноС
Β Β Β  }
Β  }

Β 

public void outer() {
Β Β Β  String s = null;
Β Β Β  inner(s);
Β  }
}

К соТалСнию, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ставят прСпятствиС для встраивания, Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Java большС распространСны, Ρ‡Π΅ΠΌ Π² C++. Допустим, компилятор пытаСтся ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² doSomething() Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅:

Foo foo = getFoo();
foo.doSomething();

Из этого Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π° компилятор Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ с ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, какая вСрсия doSomething() Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°: рСализованная Π² классС Foo, ΠΈΠ»ΠΈ Π² субклассС Foo. Π•ΡΡ‚ΡŒ нСсколько ситуаций, ΠΊΠΎΠ³Π΄Π° ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Foo ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠ°ΠΊ final ΠΈΠ»ΠΈ doSomething() ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ final-ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Foo), Π½ΠΎ Ρ‡Π°Ρ‰Π΅ всСго компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠ³Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ. Π‘ΠΎ статичСским компилятором, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½ класс Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π°ΠΌ Π±Ρ‹ Π½Π΅ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ. Но динамичСский компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для принятия Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Допустим, Ρ‡Ρ‚ΠΎ Π½Π΅ сущСствуСт Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΡ… Foo Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… классов. Π­Ρ‚Π° ситуация большС ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Ρ‚ΠΎΡ‚ случай, ΠΊΠΎΠ³Π΄Π° doSomething() являлся final-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Foo — компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ (ΡƒΠΆΠ΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅) ΠΈ, Π΄Π°Π»Π΅Π΅, ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ встраиваниС doSomething(). (ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² прямой Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° называСтся ΠΌΠΎΠ½ΠΎΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π°.)

ΠŸΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅ сСкунду — классы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ динамичСски. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Ссли компилятор Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Ρ‚Π°ΠΊΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ, Π° Π·Π°Ρ‚Π΅ΠΌ загрузится класс, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΉ Foo? Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ссли это Π±ΡƒΠ΄Π΅Ρ‚ сдСлано Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° getFoo(), ΠΈ getFoo() Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ экзСмпляр Π½ΠΎΠ²ΠΎΠ³ΠΎ субкласса Foo? НС Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ сгСнСрированный ΠΊΠΎΠ΄ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΌ? Π”Π°, Π±ΡƒΠ΄Π΅Ρ‚. Но JVM ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ это ΠΈ сдСлаСт Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ сгСнСрированный ΠΊΠΎΠ΄, основанный Π½Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΆΠ΅ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΈ возвратится ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ (ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ code path).

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ встраивании для достиТСния Π±ΠΎΠ»Π΅Π΅ высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ссли ΠΎΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ основываСтся Π½Π° Π²Π΅Ρ€Π½Ρ‹Ρ… прСдполоТСниях. ЀактичСски ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова final ΠΊ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ (совСт для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ· старой Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹) Π΄Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π‘Ρ‚Ρ€Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

Π’ листингС 3 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ шаблон ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠ°, ΠΌΠΎΠ½ΠΎΠΌΠΎΡ€Ρ„Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° ΠΈ дСоптимизация, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ бСссмыслСнным, Π½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ:

Листинг 3. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстовой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ искаТСны ΠΌΠΎΠ½ΠΎΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π΄Π΅ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ

public class StupidMathTest {
Β  public interface Operator {
Β Β Β  public double operate(double d);
Β  }

Β 

public static class SimpleAdder implements Operator {
Β Β Β  public double operate(double d) {
Β Β Β Β Β  return d + 1. 0;
Β Β Β  }
Β  }

Β 

public static class DoubleAdder implements Operator {
Β Β Β  public double operate(double d) {
Β Β Β Β Β  return d + 0.5 + 0.5;
Β Β Β  }
Β  }

Β 

public static class RoundaboutAdder implements Operator {
Β Β Β  public double operate(double d) {
Β Β Β Β Β  return d + 2.0 - 1.0;
Β Β Β  }
Β  }

Β 

public static void runABunch(Operator op) {
Β Β Β  long start = System.currentTimeMillis();
Β Β Β  double d = 0.0;
Β Β Β  for (int i = 0; i < 5000000; i++)
Β Β Β Β Β  d = op.operate(d);
Β Β Β  long end = System.currentTimeMillis();
Β Β Β  System.out.println("Time: " + (end - start) + "Β Β  ignore:" + d);
Β  }

Β 

public static void main(String[] args) {
Β Β Β  Operator ra = new RoundaboutAdder();
Β Β Β  runABunch(ra); // Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠΈ
Β Β Β  runABunch(ra);
Β Β Β  Operator sa = new SimpleAdder();
Β Β Β  Operator da = new DoubleAdder();
Β Β Β  runABunch(sa);
Β Β Β  runABunch(da);
Β  }
}

StupidMathTest сначала пытаСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΡƒ (Π±Π΅Π·ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ), Π·Π°Ρ‚Π΅ΠΌ измСряСт врСмя выполнСния SimpleAdder, DoubleAdder ΠΈ RoundaboutAdder с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 2. ΠŸΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 1 ΠΊ double, Π΄ΠΎΠ±Π°Π²ΠΈΠ² 2 ΠΈ отняв 1, Ρ‡Π΅ΠΌ просто Π΄ΠΎΠ±Π°Π²ΠΈΠ² 1 сразу ΠΆΠ΅. И Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ быстрСС Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 0.5 Π΄Π²Π°ΠΆΠ΄Ρ‹, Ρ‡Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 1. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Ρ‚Π°ΠΊΠΎΠ΅? (ΠžΡ‚Π²Π΅Ρ‚: Π½Π΅Ρ‚.)

Π’Π°Π±Π»ΠΈΡ†Π° 2. БСссмыслСнныС ΠΈ ΠΎΠ±ΠΌΠ°Π½Ρ‡ΠΈΠ²Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ StupidMathTest

MethodRuntime
SimpleAdder88ms
DoubleAdder76ms
RoundaboutAdder14ms

Π§Ρ‚ΠΎ здСсь ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ? ПослС Ρ†ΠΈΠΊΠ»Π° Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠΈ RoundaboutAdder ΠΈ runABunch() ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, ΠΈ компилятор выполняСт ΠΌΠΎΠ½ΠΎΠΌΠΎΡ€Ρ„Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° с Operator ΠΈ RoundaboutAdder, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ выполняСтся довольно быстро. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ (SimpleAdder) компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄Π΅ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚ ΠΊ диспСтчСризации Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ выполняСтся ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ благодаря нСспособности ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ) Π²Ρ‹Π·ΠΎΠ² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, врСмя тратится Π½Π° ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ. На Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ (DoubleAdder) выполняСтся мСньшС пСрСкомпиляции, поэтому ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС. (Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ компилятор собираСтся провСсти свСртываниС констант Π² RoundaboutAdder ΠΈ DoubleAdder, гСнСрируя Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎ ΠΈ SimpleAdder. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли сущСствуСт Ρ€Π°Π·Π½ΠΈΡ†Π° Π²ΠΎ врСмя выполнСния, ΠΎΠ½Π° Π½Π΅ зависит ΠΎΡ‚ арифмСтичСского ΠΊΠΎΠ΄Π°.) Какой ΠΏΡ€ΠΎΡ…ΠΎΠ΄ выполнится ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ, ΠΎΠ½ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ самым быстрым.

Π˜Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ· этого «Ρ‚Π΅ΡΡ‚Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ»? ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ тСстированиС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ динамичСски ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков программирования являСтся Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ²Π°Ρ€Π½Ρ‹ΠΌ процСссом, Ρ‡Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… здСсь ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π±Ρ‹Π»ΠΈ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ясно — Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ Π½Π΅Ρ‡Ρ‚ΠΎ. Π”Π°ΠΆΠ΅ мСньшиС эффСкты ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΊΠ°Π·ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ тСстирования ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π΅Π· Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ вашСго Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€Π° «Π§Ρ‚ΠΎ-Ρ‚ΠΎ здСсь Π½Π΅ Ρ‚ΠΎ». И хотя здСсь прСдставлСны распространСнныС источники искаТСний микротСстов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, сущСствуСт мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… источников. ΠœΠΎΡ€Π°Π»ΡŒ этой истории: Π²Ρ‹ Π½Π΅ всСгда измСряСтС Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅. ЀактичСски, Π²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ измСряСтС Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ ΠΎΡ‡Π΅Π½ΡŒ остороТны с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ Π»ΡŽΠ±Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ Π²ΠΎΠ²Π»Π΅Ρ‡Π΅Π½Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

РСсурсы

Бсылки ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Jikes Research Virtual Machine
Overview of the IBM Just-in-Time Compiler
Java theory and practice series

Об Π°Π²Ρ‚ΠΎΡ€Π°Ρ…

Brian Goetz являСтся ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 17 Π»Π΅Ρ‚. Он — Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚ Π² Quiotix, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Ρ†ΠΈΡΠΌ Π² Los Altos, Calif., ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… экспСртных Π³Ρ€ΡƒΠΏΠΏΠ°Ρ… JCP. Π˜Ρ‰ΠΈΡ‚Π΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈ готовящиСся ΠΈΠΌ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π² популярных отраслСвых публикациях.

Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ | Parallel Collections

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ JVM

ΠŸΡ€ΠΈ описании ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ выполнСния ΠΊΠΎΠ΄Π° Π½Π° JVM ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ нСсколькими коммСнтариями, ΠΈ ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚β€“ Π½Π΅ всСгда становится Ρ…ΠΎΡ€ΠΎΡˆΠΎ понятно, Ρ‡Ρ‚ΠΎ Π² силу Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½ написанный ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ. Π’ этой Π³Π»Π°Π²Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

Одной ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ процСсс компиляции Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Π½Π° JVM прилоТСния Π½Π΅ Ρ‚Π°ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ Ρƒ языка со статичСской компиляциСй (ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ здСсь [2]). ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹ Java ΠΈ Scala обходятся минимальной ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ исходных тСкстов Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ JVM. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ соврСмСнных Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Java-машин Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ прСобразуСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ‚ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ Π·Π°ΠΏΡƒΡ‰Π΅Π½. Π­Ρ‚ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ называСтся компиляциСй β€œΠ½Π° лСту” ΠΈΠ»ΠΈ JIT-компиляциСй (JIT ΠΎΡ‚ just-in-time). Однако ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ компиляция β€œΠ½Π° лСту” Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ быстрой, ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΉ компиляции остаСтся Π½ΠΈΠ·ΠΊΠΈΠΌ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ компиляции, компилятор HotSpot ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ участки ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ часто. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚ΠΎΡ‚, ΠΊΡ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚ тСст ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π΅Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚: ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ куска ΠΊΠΎΠ΄Π° (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, ΠΌΠ΅Ρ‚ΠΎΠ΄Π°) Π½Π° ΠΎΠ΄Π½ΠΎΠΌ экзСмплярС JVM ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π·Π°ΠΌΠ΅Ρ€ΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, оптимизировался Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρƒ запусками. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠ΅ врСмя выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ участка ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя врСмя, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° сама оптимизация JIT-компилятором, Ρ‡Ρ‚ΠΎ сдСлаСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ измСрСния Π½Π΅Ρ€Π΅ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ.

ΠšΡ€ΠΎΠΌΠ΅ этого, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° сторонС JVM врСмя Π½Π° осущСствлСниС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ автоматичСского управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. ВрСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСрываСтся ΠΈ вызываСтся сборщик мусора. Если исслСдуСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Ρ…ΠΎΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΡƒΡ‡Π΅ (Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ JVM Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚), Π·Π½Π°Ρ‡ΠΈΡ‚ сборщик мусора Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, исказив ΠΏΡ€ΠΈ этом Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ. МоТно Π½ΠΈΠ²Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ влияниС сборщика мусора Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, запустив ΠΈΠ·ΠΌΠ΅Ρ€ΡΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ мноТСство Ρ€Π°Π·, ΠΈ Ρ‚Π΅ΠΌ самым спровоцировав большоС количСство Ρ†ΠΈΠΊΠ»ΠΎΠ² сборки мусора.

Одной ΠΈΠ· распространСнных ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΡƒΡ…ΡƒΠ΄ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ являСтся ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΈ распаковка ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСявно происходят Π² случаях, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ пСрСдаСтся Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π² ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ (generic) ΠΌΠ΅Ρ‚ΠΎΠ΄. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΎΠ½ΠΈ Π²ΠΎ врСмя выполнСния ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π­Ρ‚ΠΎΡ‚ процСсс замСдляСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π° ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ памяти ΠΈ, соотвСтствСнно, создаСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ мусор Π² ΠΊΡƒΡ‡Π΅.

Π’ качСствС распространСнной ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΡƒΡ…ΡƒΠ΄ΡˆΠ΅Π½ΠΈΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ сопСрничСство Π·Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ (memory contention), Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π΅Π΅ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ программист Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π³Π΄Π΅ слСдуСт Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ЀактичСски, ΠΈΠ·-Π·Π° влияния сборщика мусора, это сопСрничСство ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½Π΅ΠΉ стадии ΠΆΠΈΠ·Π½ΠΈ прилоТСния, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π°Ρ‡Π½ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² памяти. Π’Π°ΠΊΠΈΠ΅ влияния Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ написании тСста.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ микротСста ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

БущСствуСт нСсколько ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ описанных Π²Ρ‹ΡˆΠ΅ эффСктов Π²ΠΎ врСмя ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ. Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ слСдуСт ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ JIT-компилятор ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π» исходный тСкст Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (ΠΈ Ρ‡Ρ‚ΠΎ послСдний Π±Ρ‹Π» ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½), ΠΏΡ€ΠΎΠ³Π½Π°Π² микротСст ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ достаточноС количСство Ρ€Π°Π·. Π­Ρ‚ΠΎΡ‚ процСсс извСстСн ΠΊΠ°ΠΊ Ρ„Π°Π·Π° Ρ€Π°Π·ΠΎΠ³Ρ€Π΅Π²Π° (warm-up).

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ число ΠΏΠΎΠΌΠ΅Ρ…, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Ρ… сборкой мусора ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ участками ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ нСсвязанной компиляциСй β€œΠ½Π° лСту”, трСбуСтся Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ микротСст Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ экзСмплярС JVM.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, запуск слСдуСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° сСрвСрной вСрсии HotSpot JVM, которая выполняСт Π±ΠΎΠ»Π΅Π΅ Π°Π³Ρ€Π΅ΡΡΠΈΠ²Π½ΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ.

НаконСц, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ сборка мусора ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ посрСди микротСста, Π»ΡƒΡ‡ΡˆΠ΅ всСго Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ выполнСния Ρ†ΠΈΠΊΠ»Π° сборки мусора ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ тСста, Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ†ΠΈΠΊΠ» ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, насколько это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π’ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Scala ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ‚Ρ€Π΅ΠΉΡ‚ scala.testing.Benchmark, спроСктированный с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ сообраТСний. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ тСстирования ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ map ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ прСфиксного Π΄Π΅Ρ€Π΅Π²Π°:

import collection.parallel.mutable.ParTrieMap
import collection.parallel.ForkJoinTaskSupport

object Map extends testing. Benchmark {
  val length = sys.props("length").toInt
  val par = sys.props("par").toInt
  val partrie = ParTrieMap((0 until length) zip (0 until length): _*)

  partrie.tasksupport = new ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(par))

  def run = {
    partrie map {
      kv => kv
    }
  }
}

ΠœΠ΅Ρ‚ΠΎΠ΄ run содСрТит ΠΊΠΎΠ΄ микротСста, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ для измСрСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ своСго выполнСния. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Map, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΉ Ρ‚Ρ€Π΅ΠΉΡ‚ scala.testing.Benchmark, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ систСмой ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ уровня ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° par ΠΈ количСства элСмСнтов Π΄Π΅Ρ€Π΅Π²Π° length.

ПослС компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅, слСдуСт Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

java -server -cp .:../../build/pack/lib/scala-library.jar -Dpar=1 -Dlength=300000 Map 10

Π€Π»Π°Π³ server Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ VM. Π€Π»Π°Π³ cp ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ β€œclasspath”, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ классов трСбуСтся ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΈ Π² jar-Π°Ρ€Ρ…ΠΈΠ²Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Scala. АргумСнты -Dpar ΠΈ -Dlength– это количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ количСство элСмСнтов соотвСтствСнно. НаконСц, 10 ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ тСст ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ JVM ΠΈΠΌΠ΅Π½Π½ΠΎ 10 Ρ€Π°Π·.

Устанавливая количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² par Π² 1, 2, 4 ΠΈ 8, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ врСмя выполнСния Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΡŠΡΠ΄Π΅Ρ€Π½ΠΎΠΌ i7 с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ гипСрпоточности:

Map$	126	57	56	57	54	54	54	53	53	53
Map$	90	99	28	28	26	26	26	26	26	26
Map$	201	17	17	16	15	15	16	14	18	15
Map$	182	12	13	17	16	14	14	12	12	12

МоТно Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Π΅ запуски трСбуСтся большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ послС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΎΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Π³ΠΈΠΏΠ΅Ρ€ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΡΡ‚ΡŒ Π½Π΅ Π΄Π°Π΅Ρ‚ большого прСимущСства Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, это слСдуСт ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΡ‚ 4 Π΄ΠΎ 8 Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Насколько Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ стоит ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ?

Π­Ρ‚ΠΎΡ‚ вопрос задаСтся часто, Π½ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Π½Π΅Π³ΠΎ достаточно Π·Π°ΠΏΡƒΡ‚Π°Π½.

Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Ρ‹ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ зависит ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ². НСкоторыС ΠΈΠ· Π½ΠΈΡ… (Π½ΠΎ Π½Π΅ всС) ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½ΠΈΠΆΠ΅:

  • АрхитСктура систСмы. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ CPU ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ характСристики ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ. Помимо этого, машина ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ многоядСрной, Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько процСссоров, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ½ΡΠΊΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρƒ.
  • ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈ вСрсия JVM. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Π²ΠΎ врСмя выполнСния ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ синхронизации ΠΈ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. НСкоторыС ΠΈΠ· Π½ΠΈΡ… Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ForkJoinPool, возвращая нас ΠΊ использованию ThreadPoolExecutor, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов.
  • ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½Π°Ρ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°. Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта, зависит ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ трСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. Π§Π΅ΠΌ мСньшС эта Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ количСство элСмСнтов для получСния ускорСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ.
  • Выбранная коллСкция. НапримСр, Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ ParArray ΠΈ ParTrieMap ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°ΡŽΡ‚ элСмСнты ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ скоростями, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ количСства Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта создаСт ΡƒΠΆΠ΅ сам ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€.
  • Выбранная опСрация. НапримСр, Ρƒ ParVector Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ трансформации (Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ filter) Ρ‡Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ получСния доступа (ΠΊΠ°ΠΊ foreach)
  • ΠŸΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты. ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ областСй памяти нСсколькими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ использовании ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² синхронизации Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π»Π° foreach, map, ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ…, ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ сопСрничСство.
  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ большого количСства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΡ€ΠΎΠ²ΠΎΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» сборки мусора. Π’ зависимости ΠΎΡ‚ способа ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ссылок Π½Π° Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ†ΠΈΠΊΠ» сборки мусора ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ большС ΠΈΠ»ΠΈ мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π”Π°ΠΆΠ΅ рассматривая Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½Π΅ Ρ‚Π°ΠΊ-Ρ‚ΠΎ просто Ρ€Π°ΡΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΠΎ влиянии ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ, Π° Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠΌ ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ выполнСния быстрой ΠΈ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сокращСния ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° (Π² нашСм случаС– суммированиСм) Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΡŠΡΠ΄Π΅Ρ€Π½ΠΎΠΌ процСссорС i7 (Π±Π΅Π· использования гипСрпоточности) Π½Π° JDK7:

import collection.parallel.immutable.ParVector

object Reduce extends testing.Benchmark {
  val length = sys.props("length").toInt
  val par = sys.props("par").toInt
  val parvector = ParVector((0 until length): _*)

  parvector.tasksupport = new collection.parallel.ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(par))

  def run = {
    parvector reduce {
      (a, b) => a + b
    }
  }
}

object ReduceSeq extends testing.Benchmark {
  val length = sys.props("length").toInt
  val vector = collection.immutable.Vector((0 until length): _*)

  def run = {
    vector reduce {
      (a, b) => a + b
    }
  }
}

Π‘Π½Π°Ρ‡Π°Π»Π° запустим тСст ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ с 250000 элСмСнтами ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ для 1, 2 ΠΈ 4 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²:

java -server -cp . :../../build/pack/lib/scala-library.jar -Dpar=1 -Dlength=250000 Reduce 10 10
Reduce$    54    24    18    18    18    19    19    18    19    19
java -server -cp .:../../build/pack/lib/scala-library.jar -Dpar=2 -Dlength=250000 Reduce 10 10
Reduce$    60    19    17    13    13    13    13    14    12    13
java -server -cp .:../../build/pack/lib/scala-library.jar -Dpar=4 -Dlength=250000 Reduce 10 10
Reduce$    62    17    15    14    13    11    11    11    11    9

Π—Π°Ρ‚Π΅ΠΌ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠΌ количСство элСмСнтов Π΄ΠΎ 120000 ΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 4 ΠΏΠΎΡ‚ΠΎΠΊΠ° для сравнСния со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ сокращСния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°:

java -server -cp .:../../build/pack/lib/scala-library.jar -Dpar=4 -Dlength=120000 Reduce 10 10
Reduce$    54    10    8    8    8    7    8    7    6    5
java -server -cp .:../../build/pack/lib/scala-library.jar -Dlength=120000 ReduceSeq 10 10
ReduceSeq$    31    7    8    8    7    7    7    8    7    8

ΠŸΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ 120000 Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ ΠΏΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π² этом случаС.

Π’ качСствС Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° возьмСм ΠΌΠ΅Ρ‚ΠΎΠ΄ map (ΠΌΠ΅Ρ‚ΠΎΠ΄ трансформации) ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ mutable.ParHashMap ΠΈ запустим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ тСст ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ срСдС:

import collection.parallel.mutable.ParHashMap

object Map extends testing.Benchmark {
  val length = sys.props("length").toInt
  val par = sys.props("par").toInt
  val phm = ParHashMap((0 until length) zip (0 until length): _*)

  phm.tasksupport = new collection.parallel.ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(par))

  def run = {
    phm map {
      kv => kv
    }
  }
}

object MapSeq extends testing.Benchmark {
  val length = sys.props("length").toInt
  val hm = collection.mutable.HashMap((0 until length) zip (0 until length): _*)

  def run = {
    hm map {
      kv => kv
    }
  }
}

Для 120000 элСмСнтов ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° количСствС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΡ‚ 1 Π΄ΠΎ 4:

java -server -cp . :../../build/pack/lib/scala-library.jar -Dpar=1 -Dlength=120000 Map 10 10    
Map$    187    108    97    96    96    95    95    95    96    95
java -server -cp .:../../build/pack/lib/scala-library.jar -Dpar=2 -Dlength=120000 Map 10 10
Map$    138    68    57    56    57    56    56    55    54    55
java -server -cp .:../../build/pack/lib/scala-library.jar -Dpar=4 -Dlength=120000 Map 10 10
Map$    124    54    42    40    38    41    40    40    39    39

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠΌ число элСмСнтов Π΄ΠΎ 15000 ΠΈ сравним с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ…ΡΡˆ-ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ:

java -server -cp .:../../build/pack/lib/scala-library.jar -Dpar=1 -Dlength=15000 Map 10 10
Map$    41    13    10    10    10    9    9    9    10    9
java -server -cp .:../../build/pack/lib/scala-library.jar -Dpar=2 -Dlength=15000 Map 10 10
Map$    48    15    9    8    7    7    6    7    8    6
java -server -cp .:../../build/pack/lib/scala-library.jar -Dlength=15000 MapSeq 10 10
MapSeq$    39    9    9    9    8    9    9    9    9    9

Для Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… Π² этом случаС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ смысл ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ вычислСниС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈ количСствС элСмСнтов большС 15000 (Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС Ρ…ΡΡˆ-отобраТСния ΠΈ Ρ…ΡΡˆ-мноТСства Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π½Π° ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… количСствах элСмСнтов, Ρ‡Π΅ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π±Ρ‹ для массивов ΠΈΠ»ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ²).

Бсылки

  1. Anatomy of a flawed microbenchmark, Brian Goetz
  2. Dynamic compilation and performance measurement, Brian Goetz

ΠžΠ±Π»Π°ΡΡ‚ΡŒ памяти Java-ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния

НСдавно ΡƒΠ·Π½Π°Π» ΠΎ JVM. Π’Π½Π°Ρ‡Π°Π»Π΅ я Π²ΠΈΠ΄Π΅Π» это быстрСС. БущСствуСт лишь расплывчатая концСпция области Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния JVM. НС ясно, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ хранятся Π² Ρ€Π°Π·Π½Ρ‹Ρ… областях памяти, поэтому я Π·Π°ΠΏΠΈΡˆΡƒ ΠΈΡ… здСсь.

ВсС ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ самоС большоС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Java ΠΈ C, C ++, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² области управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ (Java ΠΈΠΌΠ΅Π΅Ρ‚ динамичСскоС распрСдСлСниС памяти ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ сбора мусора). ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π½Π° C ΠΈ C ++ Π² Β«Π£Π³Π»ΡƒΠ±Π»Π΅Π½Π½ΠΎΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ JavaΒ»: для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½Π° C ΠΈ C ++, Π² области управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Β«ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈΒ» с Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠ΅ΠΉ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²ΠΎΠ²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Β«Π Π°Π±ΠΎΡ‡ΠΈΠΉΒ» основной Ρ€Π°Π±ΠΎΡ‚Ρ‹ — Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π»Π°Π΄Π΅Π΅Ρ‚ Β«ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽΒ» ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ выполняСт Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π½ΠΈΡŽ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΆΠΈΠ·Π½ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Для Java, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ JVM, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ области памяти Java фактичСски ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти JVM.

1. ΠžΠ±Π»Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния JVM

  • Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния?

Π—Π΄Π΅ΡΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ выполнСния Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС Π²Ρ‹ΡˆΠ΅, сначала Ρ„Π°ΠΉΠ» исходного ΠΊΠΎΠ΄Π° Java (суффикс .java) Π±ΡƒΠ΄Π΅Ρ‚ скомпилирован компилятором Java Π² Ρ„Π°ΠΉΠ» Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° (суффикс .class), Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов Π² JVM Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ исполнСния JVM. Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ всСго процСсса выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ JVM Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ пространство для хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ связанной с Π½ΠΈΠΌΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.Π­Ρ‚ΠΎ пространство ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ называСтся ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния (ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния)

  • ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ описаниС

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java Π΄Π΅Π»ΠΈΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° управляСт, Π½Π° нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… областСй Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java. Π­Ρ‚ΠΈ области ΠΈΠΌΠ΅ΡŽΡ‚ свои собствСнныС Ρ†Π΅Π»ΠΈ ΠΈ врСмя создания ΠΈ уничтоТСния. НСкоторыС области ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ с Π½Π°Ρ‡Π°Π»ΠΎΠΌ процСсса Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ области ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ Π² зависимости ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Богласно Β«Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ JavaΒ», ΠΏΠ°ΠΌΡΡ‚ΡŒ, управляСмая Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной Java, Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ области Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния.
(синий для частного ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΎΡ€Π°Π½ΠΆΠ΅Π²Ρ‹ΠΉ для ΠΎΠ±Ρ‰Π΅Π³ΠΎ)

2. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ:

Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (РСгистр счСтчика ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ) — это нСбольшой объСм памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½ΠΎΠΌΠ΅Ρ€Π° строки Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, выполняСмого Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ (Ρ‚Π°ΠΊΠΆΠ΅ извСстный ΠΊΠ°ΠΊ рСгистр ПК).Π’ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, измСняя Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого счСтчика, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°. Надо ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° этот счСтчик для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ.

ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ здСсь ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ малСнькиС Π΄Ρ€ΡƒΠ·ΡŒΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всС Π΅Ρ‰Π΅ ΠΎΡ‡Π΅Π½ΡŒ нСвСТСствСнны. Π Π°Π½Π΅Π΅ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ процСссС выполнСния Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π€Π°ΠΉΠ» исходного ΠΊΠΎΠ΄Π° Java (.javaБуффикс) Π±ΡƒΠ΄Π΅Ρ‚ скомпилирован Π² Ρ„Π°ΠΉΠ» Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° компилятором Java (.classБуффикс), Π·Π°Ρ‚Π΅ΠΌ
 Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов Π² JVM Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса, ΠΈ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ выполнСния JVM выполняСт Π΅Π³ΠΎ.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java рСализуСтся ΠΏΡƒΡ‚Π΅ΠΌ чСрСдования ΠΈ выдСлСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния процСссора, Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ процСссор Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ инструкции Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ послС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ счСтчик ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ мСсто выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ объяснСниС процСссора: ΠΊΠ°ΡˆΡ‚Π°Π½: ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΊΠΈΡ€ΠΏΠΈΡ‡Π½ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ, ваша ΠΌΠ°Ρ‚ΡŒ сказала Π²Π°ΠΌ Π΅ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ толстый Π΄ΠΎΠΌ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ счастливы Π²Ρ‹Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΊΠ½ΠΈΠ³Ρƒ. Но ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ½ΠΈΠ³Ρƒ, Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Π³Π΄Π΅ Π²Ρ‹ Π΅Π΅ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ. Как это Ρ€Π΅ΡˆΠΈΡ‚ΡŒ? Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π· я добавлю Π·Π°ΠΊΠ»Π°Π΄ΠΊΡƒ. Π­Ρ‚ΠΎ являСтся ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ счСтчика ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ записываСт ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ выполнСния Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΉΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΠ³Π΄Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ восстанавливаСт ЦП.

Из ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ объяснСния становится ясно, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ счСтчик ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ,ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ нСзависимый ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ счСтчик. Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π° ΠΈ хранятся нСзависимо. ΠœΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ этот Ρ‚ΠΈΠΏ области памяти «частным ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌΒ». Богласно спСцификации JVM, Ссли ΠΏΠΎΡ‚ΠΎΠΊ выполняСт ΠΌΠ΅Ρ‚ΠΎΠ΄ Java, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ счСтчик сохраняСт адрСс Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° инструкции, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚; Ссли ΠΏΠΎΡ‚ΠΎΠΊ выполняСт собствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ счСтчикС пустоС ( Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ). ΠœΡ‹ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ Ρ€Π°Π½Π΅Π΅: счСтчик ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ — это нСбольшой адрСс памяти. Π­Ρ‚Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти являСтся СдинствСнной ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС Java, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Π° ошибка OutOfMemoryError. Π Π°Π·ΠΌΠ΅Ρ€ пространства, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ³ΠΎ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, хранящимися Π² счСтчикС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π΅ измСнится ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π·Π°ΠΊΠ»Π°Π΄ΠΊΠ°, Π³Π΄Π΅ Π±Ρ‹ ΠΎΠ½Π° Π½ΠΈ застряла, ΠΎΠ½Π° Π½Π΅ измСнится сама ΠΏΠΎ сСбС.

2. Π‘Ρ‚Π΅ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин Java

Π‘Ρ‚Π΅ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин Java (стСк Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин Java) Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° стСк C. Как ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ счСтчик, стСк Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин Java Ρ‚Π°ΠΊΠΆΠ΅ являСтся частным ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Π‘Ρ‚Π΅ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ описываСтJava-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠœΠΎΠ΄Π΅Π»ΡŒ памяти Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π°:

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ создаст ΠΊΠ°Π΄Ρ€ стСка (Stack
Frame) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, стСка ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ², динамичСской ссылки, Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ²Π° Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ выполнСния соотвСтствуСт процСссу вставки ΠΊΠ°Π΄Ρ€Π° стСка Π² стСк Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС.

ОбъяснСниС Π§ΠΆΠΎΡƒ Π”Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΌ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСт ΠΌΠ΅Ρ‚ΠΎΠ΄, выдСляСтся ΠΊΠ°Π΄Ρ€ стСка, ΠΈ установлСнный ΠΊΠ°Π΄Ρ€ стСка помСщаСтся Π² стСк. ПослС выполнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΊΠ°Π΄Ρ€ стСка Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ ΠΈΠ· стСка. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°Π΄Ρ€ стСка, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, выполняСмому Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части стСка Java. Говоря ΠΎΠ± этом, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСковой памяти ΠΏΡ€ΠΈ использовании рСкурсивного ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

  • Π’Π°Π±Π»ΠΈΡ†Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

Π’Π°Π±Π»ΠΈΡ†Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ слСдуСт ΠΈΠ· названия, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, извСстных компилятору (8 Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…), ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (ссылочныС Ρ‚ΠΈΠΏΡ‹, для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ссылочного Ρ‚ΠΈΠΏΠ°, сохраняСтся ссылка Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ адрСс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°). Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ) ΠΈ Ρ‚ΠΈΠΏ returnAddress (адрСс Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ выполняСтся, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π² Ρ‚ΠΎ мСсто, Π³Π΄Π΅ ΠΎΠ½ Π±Ρ‹Π» Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π·Π²Π°Π½, поэтому адрСс Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ сохранСн Π² ΠΊΠ°Π΄Ρ€Π΅ стСка). Π Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ компилятором, поэтому Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π΅ измСнится Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

  • Π‘Ρ‚Π΅ΠΊ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ²

Π‘Ρ‚Π΅ΠΊ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ², Π΄Ρ€ΡƒΠ·ΡŒΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ стСк Π² структурС Π΄Π°Π½Π½Ρ‹Ρ…, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΎΡ†Π΅Π½ΠΊΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.Одним ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ стСка являСтся ΠΎΡ†Π΅Π½ΠΊΠ° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ процСссС выполнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° самом Π΄Π΅Π»Π΅ являСтся процСссом Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π° Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС — процСссом выполнСния вычислСний. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС вычислСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стСка ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ².

  • Π”Π²Π° Π½Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… состояния
    Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ StackOverflowError
    Если Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π³Π»ΡƒΠ±ΠΈΠ½Π° стСка ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΡƒΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ StackOverflowError.
    Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ OutOfMemoryError
    Если стСк Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ динамичСски Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ, ΠΈ Ссли для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΎ достаточно памяти, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ OutOfMemoryError.
3. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ стСка

Π‘Ρ‚Π΅ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ стСк Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин ΠΈΠ³Ρ€Π°ΡŽΡ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ Ρ€ΠΎΠ»ΠΈ. ΠŸΠΎΡ‚ΠΎΠΊ Ρ‚Π°ΠΊΠΆΠ΅ являСтся частным, Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ стСк Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин обслуТиваСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Java, Π° стСк Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной.Native ΠœΠ΅Ρ‚ΠΎΠ΄ обслуТивания. Π’ спСцификации JVM Π½Π΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ полоТСния ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ структурС Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Π² этом мСстС, ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ свободно. Π’ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС HotSopt Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ стСк ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ стСк Java Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ Π² ΠΎΠ΄Π½Ρƒ. Как ΠΈ стСк Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин, стСк Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ StackOverflowError ΠΈ OutOfMemoryError.

4. ΠΊΡƒΡ‡Π° Java

Java HeapΠ­Ρ‚ΠΎ самый большой Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ памяти, управляСмый Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной Java. ΠšΡƒΡ‡Π° Java являСтся ΠΎΠ±Ρ‰Π΅ΠΉ для всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ЕдинствСнная Ρ†Π΅Π»ΡŒ Java-ΠΊΡƒΡ‡ΠΈ — Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ экзСмпляры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π—Π΄Π΅ΡΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ всС экзСмпляры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ массивы Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ здСсь.Π­Ρ‚ΠΎ описано Π² Β«Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ JavaΒ»:

ВсС экзСмпляры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ массивы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² ΠΊΡƒΡ‡Π΅, Π½ΠΎ с Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ компилятора JIT ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π²Ρ‹Ρ…ΠΎΠ΄Π° постСпСнно созрСваСт, распрСдСлСниС Π² стСкС, оптимизация скалярной Π·Π°ΠΌΠ΅Π½Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠ½ΠΊΠΈΠ΅ измСнСния, всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΊΡƒΡ‡Π΅ РаспрСдСлСниС Ρ‚Π°ΠΊΠΆΠ΅ стало ΠΌΠ΅Π½Π΅Π΅ Β«Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌΒ».

ΠšΡƒΡ‡Π° Java являСтся основной ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ сборщика мусора, поэтому Π΅Π΅ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΡƒΡ‡Π΅ΠΉ Β«GCΒ».

5. ΠžΠ±Π»Π°ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

ΠžΠ±Π»Π°ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (Method Area), ΠΊΠ°ΠΊ ΠΈ ΠΊΡƒΡ‡Π°, являСтся ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ памяти, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ ΠΎΠ±Ρ‰ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Π’ области ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² хранится информация ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ классС (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ имя класса, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ»Π΅), статичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, константы ΠΈ ΠΊΠΎΠ΄, скомпилированный компилятором.

Π’ Ρ„Π°ΠΉΠ»Π΅ Class, Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ описания, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ поля, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ интСрфСйсы класса, Π΅ΡΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ — ΠΏΡƒΠ» констант, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² ΠΈ ссылок Π½Π° символы, сгСнСрированных Π²ΠΎ врСмя компиляции.

ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹ΠΉ ΠΏΡƒΠ» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния (Runtime Constant Pool) являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ области ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ являСтся прСдставлСниСм Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния постоянного ΠΏΡƒΠ»Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса ΠΈΠ»ΠΈ интСрфСйса. ПослС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ классов ΠΈ интСрфСйсов Π² JVM создаСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡƒΠ» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. Π’Ρ‹Ρ…ΠΎΠ΄ΠΈ ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ содСрТимоС ΠΏΡƒΠ»Π° констант Ρ„Π°ΠΉΠ»Π° Class ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΠΏΡƒΠ» констант Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. Π’ процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ константы Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² ΠΏΡƒΠ» констант Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ΅Ρ‚ΠΎΠ΄ String intern.

Π’ спСцификации JVM Π½Π΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ трСбования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° осущСствляла сборку мусора. МногиС ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° «постоянным ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ΠΌΒ», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина HotSpot Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² постоянном ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ сборщик мусора JVM ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ этой ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ области ΠΊΡƒΡ‡ΠΈ, поэтому Π² этой части Π½Π΅Ρ‚ нСобходимости. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сбора мусора. Однако, начиная с JDK7, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Hotspot ΡƒΠ΄Π°Π»ΠΈΠ»Π° ΠΏΡƒΠ» строковых констант ΠΈΠ· постоянной Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ.

6. ΠŸΡ€ΡΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ

ΠŸΡ€ΡΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ являСтся ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ памяти, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π² спСцификации Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java.

НСдавно Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ класс NIO Π² JDK1.4 Π²Π²ΠΎΠ΄ΠΈΡ‚ Ρ„ΠΎΡ€ΠΌΡƒ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π½Π° ΠΊΠ°Π½Π°Π»Π°Ρ… ΠΈ Π±ΡƒΡ„Π΅Ρ€Π°Ρ…, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ собствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для нСпосрСдствСнного выдСлСния памяти Π²Π½Π΅ ΠΊΡƒΡ‡ΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΅Π΅ Π² ΠΊΡƒΡ‡Π΅ Java Ρ‡Π΅Ρ€Π΅Π· ΠžΠ±ΡŠΠ΅ΠΊΡ‚ DirectByteBuffer in Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ссылка Π½Π° эту ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… мСстах, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ копирования Π΄Π°Π½Π½Ρ‹Ρ… Π½Π°Π·Π°Π΄ ΠΈ Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΡƒΡ‡Π΅ΠΉ Java ΠΈ собствСнной ΠΊΡƒΡ‡Π΅ΠΉ.

ΠŸΡ€ΡΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ этой ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ этой ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹:

γ€€γ€€https://www.cnblogs.com/dolphin0520/p/3613043.html
γ€€γ€€
Β«Π£Π³Π»ΡƒΠ±Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ JavaΒ»

runtime — Π’ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΡ‚ΠΈΠ² компиляции

ИМΠ₯О Π½ΡƒΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ссылок , рСсурсов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ прСдставлСниС ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π’Π‘ Π²ΠΎ врСмя выполнСния Π²ΠΎ врСмя компиляции, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это ΠΎΡ‡Π΅Π½ΡŒ слоТный ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ .
Π― пСрСчислим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этой ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ/ссылки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ .

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ сказано Π²Ρ‹ΡˆΠ΅ Ρ…ΠΎΡ‡Ρƒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° стоит 1000 слов :

  1. порядок этого Π΄Π²Π΅: пСрвая-это врСмя компиляции, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ
    Бкомпилированная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π° ΠΈ выполняСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Когда ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ выполняСтся, называСтся врСмя выполнСния :
    врСмя компиляции, Π° Π·Π°Ρ‚Π΅ΠΌ runtime1
    ;

CLR_diag врСмя компиляции, Π° Π·Π°Ρ‚Π΅ΠΌ runtime2

 from Wiki  

https://en. wikipedia.org/wiki/Run_time
https://en.wikipedia.org/wiki/Runtime(program_lifecycle_phase)

ВрСмя выполнСния, врСмя выполнСния, ΠΈΠ»ΠΈ выполнСния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ:

Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ

ВрСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Ρ„Π°Π·Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°) ΠΏΠ΅Ρ€ΠΈΠΎΠ΄, Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСтся

Π Π°Π½Ρ‚Π°ΠΉΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, встроСнных Π² язык программирования

Π’ΠΎ врСмя выполнСния систСмы, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ для Π­Π’Πœ

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, процСсс выполнСния ΠΏΠΎΡ€ΡƒΡ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π²ΠΎ врСмя Ρ„Π°Π·Ρ‹ выполнСния

Бписок компиляторов

https://en.wikipedia.org/wiki/List_of_compilers

  • поиск Π² Google ΠΈ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ошибки Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΡ‚ΠΈΠ² ошибки компиляции:

;

  1. На ΠΌΠΎΠΉ взгляд ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ :
    3.1 Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ² компиляции ΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° сборки
    https://maven. apache.org/guides/introduction/introduction-to-the-lifecycle.html

3.2 Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ этим 3 Π²Π΅Ρ‰ΠΈ : ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ² выполнСния

https://www.quora.com/What-is-the-difference-between-build-run-and-compile
Π€Π΅Ρ€Π½Π°Π½Π΄ΠΎ Падоан, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Ρ‡Ρ‚ΠΎ’s просто Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ Π½Π° язык Π΄ΠΈΠ·Π°ΠΉΠ½Π°
ΠžΡ‚Π²Π΅Ρ‚ΠΈΠ» 23 ЀСвраля
Π― ΠΈΠ΄Ρƒ Π½Π°Π·Π°Π΄ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹:

Π±Π΅Π³ становится Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ» (ΠΈΠ»ΠΈ скрипт, для ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков), Π½Ρƒ… выполняСтся ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹ΠΉ процСсс Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅;
компиляция-это процСсс Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанной Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ языкС высокого уровня (Π²Ρ‹ΡˆΠ΅, Ссли ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ с ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ), ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° синтаксиса это, сСмантика, связываСмыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎ созданиС Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² качСствС Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ. Π­Ρ‚ΠΎΡ‚ исполняСмый Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ΅ машинного ΠΊΠΎΠ΄Π°, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ β€” Ρ‡Ρ‚ΠΎ это, инструкция Ρ‚Π°Ρ€Π³Π΅Ρ‚ΠΈΠ½Π³ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹;
Π΄ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΈ прСдоставлСнии зависимостСй, изучая ΠΊΠΎΠ΄, компиляция ΠΊΠΎΠ΄Π° Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ автоматичСских тСстов ΠΈ упаковывая ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ[Ρ…] ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ Π°ΠΊΡ‚ΠΈΠ²Ρ‹ (изобраТСния, Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Ρ‚. Π΄.) Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ развСртывания Ρ„Π°ΠΉΠ»Π°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ процСссов Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выполняСтся сборка. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° Java-прилоТСния для Tomcat Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ .Ρ„Π°ΠΉΠ» Π²ΠΎΠΉΠ½Π°. ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ исполняСмого Ρ„Π°ΠΉΠ»Π° Win32 ΠΈΠ· ΠΊΠΎΠ΄Π° C++ ΠΌΠΎΠΆΠ½ΠΎ просто вывСсти .exe ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΠ»ΠΈ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ .установщик MSI.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ



НС смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ описываСмыС Π½ΠΈΠΆΠ΅ Ρ‚Ρ€ΡŽΠΊΠΈ ΠΈ совСты Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² J2ME, ΠΈΠΌΠ΅Π½Π½ΠΎ для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ пСрвостСпСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² силу ограничСнности рСсурсов ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

Π’Π΅Ρ…Π½ΠΈΠΊΠΈΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, основаны Π½Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ объСма памяти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹. К соТалСнию, рСсурсы ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java ME ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹, ΠΈ программисту приходится постоянно Π±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ экономиСй систСмных рСсурсов. На ΠΌΠΎΠΉ взгляд, Ρ€Π°Π½ΠΎ начатая оптимизация ΠΊΠΎΠ΄Π° Π²Π΅Π΄Π΅Ρ‚ ΠΊ ΡƒΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΡŽ ΠΈ замСдлСнию процСсса Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, поэтому Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Ρ‚ΡƒΡ‚ совСтов Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΡƒΠΆΠ΅ Π½Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅ΠΉ Ρ„Π°Π·Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΡƒΠΆΠ΅ всС ΠΎΡ‚Π»Π°ΠΆΠ΅Π½ΠΎ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

1. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ синхронизации

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ синхронизации, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 4 Ρ€Π°Π·Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. НСзависимо ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Java VM использованиС синхронизации Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ большого количСства Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий: ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ контСкст ΠΏΡ€ΠΈ Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ ΠΈ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π° с контСкстом Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π°. ΠŸΠΎΡ‚ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ контСксту Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΡΡ‚ΠΎΡΡ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ ΠΆΠ΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ освобоТдСния. Π”ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π» достаточно ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΎΠ²ΠΎΠ΄Ρ‹, ΠΈ Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π±Π΅Π· Π½Π΅Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ.

Β 2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ вычислСния

 Если Π’Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΈΠ³Ρ€Ρƒ с 3D ΠΈΠ»ΠΈ 2. 5D Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ, Ρ‚ΠΎ навСрняка ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ массу матСматичСских вычислСний с тригономСтричСскими функциями. Π’Π°ΠΊΠΈΠ΅ расчСты сильно Π½Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ процСссор, поэтому стоит Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ слоТныС выраТСния ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² Π²ΠΈΠ΄Π΅ массива, ΠΎΡ‚ΠΊΡƒΠ΄Π° Π΄ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ значСния Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Помимо Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ сущСствуСт масса ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π³Π΄Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ вычислСния ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΈ ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ массивов Π΄Π°Π½Π½Ρ‹Ρ….
Β 

Β 3. ВытягиваниС массивов

 Доступ ΠΊ элСмСнтам массива Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы — Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ мСдлСнная история. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ использования ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случав ΠΎΠ½ΠΈ Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ.
Β 
Β ΠŸΡ€ΠΈΠΌΠ΅Ρ€

// Π”ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ
int[][] table;// Π’Π°Π±Π»ΠΈΡ†Π° 4x4
Β 
// ПослС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ
int[] table;// Π’Π°Π±Π»ΠΈΡ†Π° 1x16

А Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ мСньшС динамичСской памяти, Ρ‡Π΅ΠΌ ΠΈΡ… ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ.

Β 4.

Π Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»ΠΎΠ² for

Β Π¦ΠΈΠΊΠ»Ρ‹ — это Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΡˆΡ‚ΡƒΠΊΠ°, Π½ΠΎ ΠΎΠ½ΠΈ нСсут Π² сСбС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы. ВмСстС с Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π° Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС выполняСтся опСрация увСличСния счСтчика ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° условия. НапримСр

 void printMsg(){
for(int loop=0; loop<15; loop++){
System.out.println(msg);
}
}

ВыполняСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

void printMsg(){
int loop=0;
Β 
System.out.println(msg);
if(loop>=15){
return;
}
loop++;
Β 
System.out.println(msg);
if(loop>=15){
return;
}
loop++;
Β 
System.out.println(msg);
if(loop>=15){
return;
}
loop++;
Β 
System.out.println(msg);
if(loop>=15){
return;
}
loop++;
Β 
System.out.println(msg);
if(loop>=15){
return;
}
loop++;
Β 
System.out.println(msg);
if(loop>=15){
return;
}
loop++;
Β 
System.out.println(msg);
if(loop>=15){
return;
}
loop++;
Β 
System.out.println(msg);
if(loop>=15){
return;
}
loop++;
Β 
System.out.println(msg);
if(loop>=15){
return;
}
loop++;
Β 
System. out.println(msg);
if(loop>=15){
return;
}
loop++;
Β 
System.out.println(msg);
if(loop>=15){
return;
}
loop++;
Β 
System.out.println(msg);
if(loop>=15){
return;
}
loop++;
Β 
System.out.println(msg);
if(loop>=15){
return;
}
loop++;
Β 
System.out.println(msg);
if(loop>=15){
return;
}
loop++;
Β 
System.out.println(msg);
if(loop>=15){
return;
}
loop++;
}

Π― ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ сдСлал этот список Ρ‚Π°ΠΊΠΈΠΌ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π’Ρ‹ почувствовали, насколько наша Тизнь стала ΠΏΡ€ΠΎΡ‰Π΅ с появлСниСм Ρ†ΠΈΠΊΠ»ΠΎΠ². Однако ΠΌΠ½ΠΎΠ³ΠΈΠ΅ программисты ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ ΠΈ Π½Π΅ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходах, сопряТСнных с ΠΈΡ… использованиСм.

Если Π²Ρ‹ Π½Π° этапС программирования Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅Ρ‚Π΅ число Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ частично Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ†ΠΈΠΊΠ»:

void printMsg(){
Β 
for(int loop=0; loop<15; loop+=5){
Β 
System.out.println(msg);
System.out.println(msg);
System.out.println(msg);
System.out.println(msg);
System.out.println(msg);
}
}

Π­Ρ‚Π° рСализация Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ всСго 3 Ρ€Π°Π·Π°, соотвСтствСнно Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡΡ Π² 5 Ρ€Π°Π· ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ.

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

Β 5. Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Ρ†ΠΈΠΊΠ»ΠΎΠ² for

 Бмысл ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сТатия Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² вынСсСнии Π·Π° Ρ€Π°ΠΌΠΊΠΈ Ρ†ΠΈΠΊΠ»Π° всСго Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ нуТдаСтся Π² ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ вычислСнии:

// ΠŸΠ»ΠΎΡ…ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄
for(int loop=0; loop<10; loop++){
Β 
int a=5;
int b=10;
Β 
int c= a* b+ loop;
}
Β 
Β 
// А Π²ΠΎΡ‚ здСсь - всС Π² порядкС
int a=5;
int b=10;
Β 
for(int loop=0; loop<10; loop++){
Β 
int c= a* b+ loop;
}

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ a ΠΈ b Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ присваиваСтся всСго ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ Π½Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ 20 Π»ΠΈΡˆΠ½ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ присваивания Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΌΠ΅Π½Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ сТатия Ρ†ΠΈΠΊΠ»ΠΎΠ². Никогда Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ вычислСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Ρ†ΠΈΠΊΠ»Π°. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅:

//ΠŸΠ»ΠΎΡ…ΠΎΠΉ ΠΊΠΎΠ΄
for(int loop=0; loop< msgs.size(); loop++){
Β 
System.out.println(msgs.get(loop));
}
Β 
Β 
// Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΊΠΎΠ΄
int msgCount= msgs.size();
for(int loop=0; loop< msgCount; loop++){
Β 
System.out.println(msgs.get(loop));
}

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС вычисляСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ msgs. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС — это дСлаСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° Ρ†ΠΈΠΊΠ»Π°. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, эта оптимизация ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ влияСт Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ msgs.

6. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ интСрфСйсных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Π’ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π΅ Java сущСствуСт 4 Ρ‚ΠΈΠΏΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². НиТС ΠΎΠ½ΠΈ пСрСчислСны Π² порядкС ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ скорости Π²Ρ‹Π·ΠΎΠ²Π°.

invokestatic
БтатичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ экзСмпляр класса, поэтому ΠΈΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ подходящий ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° экзСмпляр.

invokevirtual
ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

invokespecial
Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ — конструкторы, private ΠΈ super class ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

invokeinterface
Π’Ρ€Π΅Π±ΡƒΡŽΡ‚ поиск подходящСй Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйсного ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Π’ΠΈΠΏ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² влияСт Π½Π° вСсь Π΄ΠΈΠ·Π°ΠΉΠ½ прилоТСния, поэтому ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎ скорости Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’Ρ‹Π·ΠΎΠ² статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² обСспСчиваСт Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Java VM Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ. Π’Ρ‹Π·ΠΎΠ² интСрфСйса Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ² — самый ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π²Π° поиска.

7. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ массиву

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнту массива — Π½Π΅ самая быстрая опСрация. Если Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ элСмСнт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ — сохранитС Π΅Π³ΠΎ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°Ρ‚Π΅ΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅.

8. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ использования Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ нСстатичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²Ρ‹ нСявно ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ ссылку this вмСстС с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. Π’ Java VM Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ стСка. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ заносятся Π² стСк, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ нСобходимости использования стСка, ΠΎΡ‚ΠΊΠ°Π·Π°Π²ΡˆΠΈΡΡŒ ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

// ΠŸΠ»ΠΎΡ…ΠΎ
return multiply(int a, int b){
Β 
return a* b;
}
Β 
Β 
// Π₯ΠΎΡ€ΠΎΡˆΠΎ
int result;
int a;
int b;
Β 
void multiply(){
Β 
result= a* b;
}

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния высокоуровнСвого программирования ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ стили ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС. Π•Ρ‰Π΅ большСй скорости Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, Ссли ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠ°ΠΊ статичСскиС. Π’ этом случаС ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° стСк Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ задСйствован Π²ΠΎΠΎΠ±Ρ‰Π΅.

9. ΠžΡ‚ΠΊΠ°ΠΆΠΈΡ‚Π΅ΡΡŒ ΠΎΡ‚ использования Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ ΠΈΠ· стСка ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ эффСктивнСС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

10. НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ getter-Ρ‹/setter-Ρ‹

ΠžΡ‚ΠΊΠ°ΠΆΠΈΡ‚Π΅ΡΡŒ ΠΎΡ‚ использования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΈ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… значСния ΠΏΠΎΠ»Π΅ΠΉ класса ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΊ Π½ΠΈΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, это Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ ООП, Π½ΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ этот шаг Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ я избавляюсь ΠΎΡ‚ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ стадии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ Ρ€Π΅Π΄ΠΊΠΈΠΉ случай, ΠΊΠΎΠ³Π΄Π° оптимизация ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ связана с ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

11. ЭффСктивная ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½Π΅ всС матСматичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π°Π²Π½Ρ‹ ΠΏΠΎ скорости выполнСния. Быстро Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ слоТСниС ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅. Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄Π΅Π»Π΅Π½ΠΈΠ΅, вычислСниС модуля — Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅. Π‘Π°ΠΌΡ‹ΠΌΠΈ быстрыми ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ±ΠΈΡ‚Ρ‹Π²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

// ΠŸΠ»ΠΎΡ…ΠΎ
int a=5*2;
Β 
Β 
// Π£ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅
int a=5+5;
Β 
Β 
// Π₯ΠΎΡ€ΠΎΡˆΠΎ: ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ сдвиг эквивалСнтСн ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΈ дСлСнию Π½Π° 2
int a=5<<1;// Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ Π² 5 (0000 0101) 1-Π±ΠΈΡ‚ Π²Π»Π΅Π²ΠΎ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 10 (0000 1010).
Β 
Β 
// Π•Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅
int a=10;// ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅
// Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹?

Π­Ρ‚ΠΈΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ пользовались Π΅Ρ‰Π΅ ΠΏΡ€Π°ΠΎΡ‚Ρ†Ρ‹, ΠΊΠΎΠ³Π΄Π° писали ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΈΠ³Ρ€Ρ‹ ΠΏΠΎΠ΄ DOS. Для Java ΠΎΠ½ΠΈ Ρ‚ΠΎΠΆΠ΅ подходят.

12. ΠŸΠΈΡˆΠΈΡ‚Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ‚ΠΈΠΏΠ° +=, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄.

\\ΠŸΠ»ΠΎΡ…ΠΎ
x=x+1;
\\Π₯ΠΎΡ€ΠΎΡˆΠΎ
x+=1;

13. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ встроСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

ΠŸΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, прСдоставляСмыми ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ. НапримСр, использованиС System.arraycopy для копирования элСмСнтов массива Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ эффСктивным, Ρ‡Π΅ΠΌ аналогичная собствСнная рСализация.
Β 

14. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ StringBuffer вмСсто String

Если Π’Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ со строками, значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ класс StringBuffer вмСсто String. Π›ΡŽΠ±ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° String ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊΒ  созданию Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’Ρ‹ΡˆΠ΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ с успСхом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для мобильной ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ J2ME. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ основаны Π½Π° Π°Π½Π°Π»ΠΈΠ·Π΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ программирования, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ:j2medevcorne
javajazzup.com

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄:АлСксандр Π›Π΅Π΄ΠΊΠΎΠ²

Как ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ быстродСйствиС вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ | GeekBrains

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹.

https://d2xzmw6cctk25h.cloudfront.net/post/853/og_cover_image/4affef55e59a548052479e0a0a247845

Π”Π°Π½Π½Ρ‹ΠΉ тСкст Π±ΡƒΠ΄Π΅Ρ‚ посвящён Π² большСй стСпСни Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ свои ΠΏΠ΅Ρ€Π²Ρ‹Π΅ шаги Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ задумываСтся. А ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ, практичСски всС основныС шаги ΠΏΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ скорости выполнСния вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ нСпосрСдствСнно связаны с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ происходящих процСссов. Π˜Ρ‚Π°ΠΊ, оставим ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ„Ρ€Π°Π·Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ нСпосрСдствСнно ΠΊ сути.

НС Π½Π°Π²Ρ€Π΅Π΄ΠΈ

На ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ влияСт 2 нСпосрСдствСнных Ρ„Π°ΠΊΡ‚ΠΎΡ€Π°:

  • Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ исполнСния ΠΊΠΎΠ΄Π°
  • ΠžΠ±ΡŠΡ‘ΠΌ выдСляСмой памяти

Как Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ влияниС ΠΎΠ±ΠΎΠΈΡ… этих Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ: заигрывания с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ приводят ΠΊ Ρ€Π°Π·Π΄ΡƒΠ²Π°Π½ΠΈΡŽ ΠΊΠΎΠ΄Π°, Π° Β«ΠΌΠ°Π»ΠΎΠ±ΡƒΠΊΠ²Π΅Π½Π½Ρ‹ΠΉΒ» тСкст ΠΊ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΡŽ рСсурсов исполняСмой машиной. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ являСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ·Π»ΠΈΡˆΠ΅ΡΡ‚Π² Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ лишнСго ΠΊΠΎΠ΄Π° ΠΈ строго ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ использованиС памяти. На словах это Π»Π΅Π³ΠΊΠΎ, Π° Π½Π° Π΄Π΅Π»Π΅?

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ

Если Π·Π°Π΄Π°Ρ‡Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ встала ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ ΡƒΠΆΠ΅ послС написания ΠΊΠΎΠ΄Π°, Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ очистка ΠΈ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π½Π° части с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ². ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… участков, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… Π·Π°Ρ…ΠΎΠ΄ΠΎΠ² Ρ†ΠΈΠΊΠ»ΠΎΠ².

Анализ скорости выполнСния послС разбиСния чистого ΠΊΠΎΠ΄Π° даст Π²Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΎΡ†Π΅Π½ΠΊΡƒ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΡƒΡŽ сторону Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ свои усилия ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Π›ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ссли ΠΎΠ΄Π½Π° опСрация выполняСтся 40% Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π° другая – 2%, Ρ‚ΠΎ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΡƒΠ΄Π° большС усилий ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΊ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡŽ производствСнных ΠΏΠΎΡ‚Π΅Ρ€ΡŒ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ ΡƒΠΆΠ΅ чистый, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»:

  1. ΠœΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ количСство ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. НапримСр, ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ·ΠΎΠ±ΠΈΠ»ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ. По ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ красивого ΠΊΠΎΠ΄Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° свой ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ счётчик, Π½ΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ – это Ρ‚Ρ€Π°Ρ‚Π° Π΄Ρ€Π°Π³ΠΎΡ†Π΅Π½Π½Ρ‹Ρ… рСсурсов. Если Π² ΠΎΠ΄Π½ΠΎΠΉ части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ пСрСмСнная β€œΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π»Π°β€, Ρ‚ΠΎ Π΅Ρ‘ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ.
  2. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Ρ‹ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Как извСстно, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ свой ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ собствСнно Ρ‚ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рСзСрвируСтся ΠΏΠΎΠ΄ Π΅Π³ΠΎ использованиС. НапримСр, создавая ΠΊΠΎΠ΄ Π² Java ΠΈ имСя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΡΠΏΠΎΡΠΎΠ±Π½ΡƒΡŽ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° значСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«onΒ» ΠΈ Β«offΒ»), Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ boolean с созданиСм ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ соотвСтствия, Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ char.
  3. ΠœΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ количСство присваиваний. ΠžΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ, Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΡƒΡΡΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌΠΈ красоты ΠΊΠΎΠ΄Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ арифмСтичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° нСсколько Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΡ…. Π­Ρ‚ΠΎ Ρ‡Ρ€Π΅Π²Π°Ρ‚ΠΎ появлСниСм ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ лишними опСрациями присваивания, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½ΠΎ Π½Π° быстродСйствии Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ скаТСтся.
  4. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ объявлСнии. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Ρ‚ΠΎΠ½Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ повысит ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ лишниС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΈ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ ΠΎΡ‚ Π½Π΅Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… ошибок.
  5. ΠžΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΡ‘ΠΌ ΠΈΠ· основ программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, часто игнорируСтся Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌΠΈ.
  6. ΠžΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹. Допустим, Ρƒ вас Π΅ΡΡ‚ΡŒ нСсколько массивов ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ размСрности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π΄ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСсколько Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡ…Π½ΡƒΡ‚ΡŒ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΎΠ±Ρ‰ΠΈΠΉ Ρ†ΠΈΠΊΠ» ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ быстродСйствиС. Π Π΅ΡˆΠ°Ρ‚ΡŒ Π²Π°ΠΌ.
  7. Использованная ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ очищаСтся. БСзусловно, Π½Π΅ стоит ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ сразу послС окончания Π΅Ρ‘ использования, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с сущСствСнным объСмом памяти (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с большими массивами), ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ рСсурсов просто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

Когда оптимизация Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла

БСзусловно, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π° Π² случаС с рядом языков ΠΈ компиляторов (ΠΊΠ°ΠΊ Π² случаС Dart Π² JavaScript с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ dart2js), Π²Ρ‹ ΠΈ вовсС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎ собствСнными Ρ€ΡƒΠΊΠ°ΠΌΠΈ вряд Π»ΠΈ создадитС Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅.

Однако, Π² любом случаС, ΠΎΠΏΡ‹Ρ‚ примСнСния описанных Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ² ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΡƒ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΈΠ· разряда Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… программистов Π² разряд эффСктивных, вСдь Ρ‚Π°ΠΊ Π²Ρ‹ сэкономитС Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ рСсурсы ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π½ΠΎ ΠΈ своС Π»ΠΈΡ‡Π½ΠΎΠ΅ врСмя.

А ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΈΡ‘ΠΌΡ‹ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π²Ρ‹?

Β 

Как ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π΅ врСмя выполнСния Π² Java

БущСствуСт двумя способами измСрСния ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π² Java : с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ System.currentTimeinMillis () ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ System.nanoTime (). Π­Ρ‚ΠΈ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для измСрСния ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ событиями Π² Java. ВычислСниС ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ — это ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΄Π΅Π»Π°Π΅Ρ‚ Java-программист, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, сколько сСкунд ΠΈΠ»ΠΈ миллисСкунд Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°.Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ программистов Π½Π° Java Π·Π½Π°ΠΊΠΎΠΌΡ‹ с System.currentTimeInMillis (), которая присутствуСт с самого Π½Π°Ρ‡Π°Π»Π°, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ новая вСрсия ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ измСрСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ System. nanoTime прСдставлСна ​​в Java 1.5 вмСстС с нСсколькими Π½ΠΎΠ²Ρ‹ΠΌΠΈ функциями Π½Π° Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Generics, Enum types, автобокс ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ»ΠΈ varargs.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой ΠΈΠ· Π½ΠΈΡ… для измСрСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Java. Π₯отя для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ измСрСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ² Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ System.nanoTime ().

ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΡ‡ΠΈΠΌ, Ссли Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² срСдС Spring, я Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΠΌ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ ΠΊ всСстороннСму ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ курсу для Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ изучСния Spring. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ, я Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π²Π°ΠΌ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° Spring Framework 5: ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π΄ΠΎ Guru , ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΡΠ΅ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰ΠΈΡ… ΠΈ практичСских курсов ΠΏΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ соврСмСнной Spring. Он Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»Π΅Π½ ΠΈ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ вСсну 5.

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ доступно, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΡƒΠΏΠΈΡ‚ΡŒ Π΅Π³ΠΎ всСго Π·Π° 10 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² Π½Π° распродаТах Udemy, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ происходят.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java для измСрСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π² Java

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для измСрСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΠΊΠΎΠ΄Π° с с использованиСм System. nanoTime. МногиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Java с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Apache commons-lang, Google commons ΠΈ Spring, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ слуТСбный класс StopWatch, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для измСряСт ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π΅ врСмя Π² Java .

StopWatch ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ вычислСний ΠΏΡ€ΠΈ вычислСнии ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, Π½ΠΎ Π±ΡƒΠ΄ΡŒΡ‚Π΅ остороТны, Ρ‡Ρ‚ΠΎ StopWatch Π½Π΅ являСтся ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ совмСстно Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС, ΠΈ Π΅Π³ΠΎ докумСнтация Ρ‡Π΅Ρ‚ΠΊΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ это большС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π² срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования для основных ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π° Π½Π΅ вычислСниС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² производствСнной срСдС.

import org.springframework.util.StopWatch;

/ **
* ΠŸΡ€ΠΎΡΡ‚Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Java для измСрСния ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π² Java
* Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Java ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π΄Π²Π° способа измСрСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Java с использованиСм System.nanoTime (), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π²
* Π² Java 5, ΠΈ StopWatch, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ это слуТСбный класс ΠΈΠ· Spring Framework.
* /

public class MeasureTimeExampleJava {

public static void main ( String args []) {

// ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с использованиСм систСмы.nanoTime
long startTime = System .nanoTime ();
для ( int i = 0; i <1000000; i ++) {
Object obj = new Object ();
}
long elapsedTime = БистСма .nanoTime () — startTime;

System .out.println (Β«ΠžΠ±Ρ‰Π΅Π΅ врСмя выполнСния для создания 1000K ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Java Π² миллисСкундах:Β»
+ elapsedTime / 1000000);

// ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Spring StopWatch
StopWatch watch = new StopWatch ();
часы.НачнитС();
для ( int i = 0; i <1000000; i ++) {
Object obj = new Object ();
}
watch.stop ();
System .out.println (Β«ΠžΠ±Ρ‰Π΅Π΅ врСмя выполнСния для создания 1000K ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Java с использованиСм StopWatch Π² миллисСкундах:Β»
+ watch. getTotalTimeMillis ());
}

}

Π’Ρ‹Π²ΠΎΠ΄:
ΠžΠ±Ρ‰Π΅Π΅ врСмя выполнСния для создания 1000K ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Java Π² миллисСкундах: 18
ΠžΠ±Ρ‰Π΅Π΅ врСмя выполнСния для создания 1000K ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Java с использованиСм StopWatch Π² миллисСкундах: 15

Какой ΠΈΠ· Π½ΠΈΡ… слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для измСрСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π² Java

Π­Ρ‚ΠΎ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ доступны Π²Π°ΠΌ, Ссли Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с JDK 1 Π½ΠΈΠΆΠ΅.5, Ρ‡Π΅ΠΌ System.currentTimeInMillis (), являСтся Π»ΡƒΡ‡ΡˆΠΈΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния доступности, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ послС JDK 1.5 System.nanoTime ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для измСрСния ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π΅Π½ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ систСмныС часы ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ с Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎ наносСкунды .

Π₯отя, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ ΠΈΠ· упомянутых Π²Ρ‹ΡˆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Java, Π² основном Spring, Ρ‡Π΅ΠΌ StopWatch, Ρ‚Π°ΠΊΠΆΠ΅ являСтся Π»ΡƒΡ‡ΡˆΠΈΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ, Π½ΠΎ, ΠΊΠ°ΠΊ я ΡƒΠΆΠ΅ сказал Ρ€Π°Π½Π΅Π΅, StopWatch Π½Π΅ являСтся ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования.

Подобно Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ SimpleDateFormat Π½Π΅ являСтся потокобСзопасным, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ThreadLocal для создания SimpleDateFormat для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΈ с StopWatch. Но я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ сСкундомСр — это Ρ‚Π°ΠΊΠΎΠΉ тяТСлый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠ°ΠΊ SimpleDateFormat.

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

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°
Spring Framework 5: ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π΄ΠΎ Π³ΡƒΡ€Ρƒ
ΠŸΠΎΠ»Π½Ρ‹ΠΉ Java MasterClass
Core Java, Volume II — Advanced Features
Spring Fundamentals

Π”Ρ€ΡƒΠ³ΠΎΠΉ Руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Java , ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΡ‚ΡŒΡΡ:

Π‘Π±ΠΎΡ€ ΠΈ Π°Π½Π°Π»ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния — Java Enterprise Performance

БущСствуСт Π΄Π²Π° ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сбора Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния: ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π½Π° основС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π½Π° основС событий. Оба стали стандартными частями ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² для управлСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΈ ΠΎΠ±Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ стСка, поэтому внСшнС выглядят ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. ΠœΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ…, ΡƒΠΊΠ°Π·Π°Π² Π½Π° Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ различия Π² ΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°Ρ… ΠΊ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ


ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ Π½Π° основС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ стСки всСх Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² прилоТСния Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ с постоянным ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ (частотой дискрСтизации).Π—Π°Ρ‚Π΅ΠΌ провСряСтся стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΈ для Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° устанавливаСтся состояниС ΠΏΠΎΡ‚ΠΎΠΊΠ° — Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅. Π§Π΅ΠΌ Ρ‡Π°Ρ‰Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ появляСтся Π² Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅, Ρ‚Π΅ΠΌ большС врСмя Π΅Π³ΠΎ выполнСния ΠΈΠ»ΠΈ оТидания.

КаТдая Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ выполнялся, Π½ΠΎ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ выполнСния ΠΈΠ»ΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π°Π²Ρ‹ΡˆΠ΅Π½Π½Ρ‹ΠΉ вСс, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ Π²ΠΎ врСмя, Π½ΠΎ Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π°ΠΌΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ. По ΠΎΠ±Π΅ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ это затрудняСт сбор Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

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

Рисунок 1.12: Π‘Ρ‚Π΅ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 20 мс.

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ создаСт собствСнныС ошибки измСрСния, Π½ΠΎ обСспСчиваСт простой способ отслСТивания ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΌ прСимущСством являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° измСрСния ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ; Ρ‡Π΅ΠΌ Π΄Π»ΠΈΠ½Π½Π΅Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π», Ρ‚Π΅ΠΌ мСньшС Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы. Π­Ρ‚ΠΈ Π½ΠΈΠ·ΠΊΠΈΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы особСнно Π²Π°ΠΆΠ½Ρ‹ Π² производствСнной срСдС ΠΏΡ€ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ:

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ запрос выполняСтся ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π½ΠΎ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя Ρƒ нас Π½Π΅Ρ‚ свСдСний ΠΎ фактичСском количСствС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ€Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π‘ΠΎΠ±Ρ€Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π΄Π°ΡŽΡ‚ Π½Π°ΠΌ возмоТности ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° выполняСтся ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ выполняСтся слишком часто. Анализ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования измСрСния Π½Π° основС событий.

Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π½Π° основС событий


ВмСсто Π²Ρ‹Π±ΠΎΡ€ΠΎΠΊ Ρ€Π΅Π·ΡŒΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π½Π° основС событий Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².ΠœΡ‹ рСгистрируСм Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΊΡƒ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ врСмя выполнСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Π­Ρ‚ΠΎ простой вопрос вычислСния Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ собранными ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Рисунок 1.13: Для измСрСния Π½Π° основС событий рСгистрируСтся врСмя Π½Π°Ρ‡Π°Π»Π° ΠΈ окончания ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Java Runtime ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ‡Π΅Ρ€Π΅Π· JVMPI / JVMTI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ выполнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.Однако этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ сопряТСн с большими Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ расходами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ сущСствСнно ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ прилоТСния Π²ΠΎ врСмя выполнСния. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ измСрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ инструмСнты Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ инструмСнтария Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Ρ…Π²Π°Ρ‚Π° контСкстной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ измСрСния


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

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

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ диагностика, обСспСчиваСмая Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ измСрСниями, особСнно Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с распрСдСлСнными прилоТСниями. БущСствуСт нСсколько способов коррСляции ΠΌΠ΅ΠΆΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ:

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ Π½Π° основС Ρ‚ΠΈΠΏΠ° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΈΠΏΠ° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠΎΡ€Ρ€Π΅Π»ΡΡ†ΠΈΡŽ Π½Π° основС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ ΠΈ ΠΎ Ρ‚ΠΈΠΏΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,Π³. URL) учитываСтся. ΠšΠΎΡ€Ρ€Π΅Π»ΡΡ†ΠΈΡ Π½Π° основС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π­Ρ‚ΠΎ позволяСт ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… уровнях ΠΈ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ ΠΊ ΠΌΠ΅ΠΆΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ коррСляции.

Рисунок 1.14: ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ рСгистрируСтся с использованиСм Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π°Ρ‡Π°Π»Π° ΠΈ окончания для расчСта ΠΎΠ±Ρ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния.

Π“ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹


Π“ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΡΠΎΡ‡Π΅Ρ‚Π°ΡŽΡ‚ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° основС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ событий, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСимущСства ΠΎΠ±ΠΎΠΈΡ… ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… нСдостатков.ОсновноС прСимущСство сбора Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° основС событий Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π·Π°Ρ…Π²Π°Ρ‚Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΈ Π΅Π³ΠΎ контСкста, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ОсновноС прСимущСство ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, основанного Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² постоянных ΠΈ нСзависимых ΠΎΡ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходах.

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

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ прилоТСния Π²ΠΎ врСмя выполнСния, Π° ΠΏΠΎΡ‡Ρ‚ΠΈ постоянныС Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Ρ…ΠΎΡ€ΠΎΡˆΠΎ подходят для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° производства. На рисункС ΠΏΠΎΠΊΠ°Π·Π°Π½Π° трассировка Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π°Ρ ΠΎΠ±Π° источника Π΄Π°Π½Π½Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π”Π°Π½Π½Ρ‹Π΅ Π½Π° основС событий ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ синим Ρ†Π²Π΅Ρ‚ΠΎΠΌ, Π° Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° основС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ — Π·Π΅Π»Π΅Π½Ρ‹ΠΌ.

Рисунок 1.15: Гибридная трассировка Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ (Π·Π΅Π»Π΅Π½Ρ‹Π΅ участки Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ снимки ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²)

Java 14 ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π·Π° счСт Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Java 14 Π΄Π΅Π±ΡŽΡ‚ΠΈΡ€ΠΎΠ²Π°Π» 17 ΠΌΠ°Ρ€Ρ‚Π°, став ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ языка программирования Java Π² 2020 Π³ΠΎΠ΄Ρƒ.

Java 14 Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΡˆΠ΅ΡΡ‚ΡŒ мСсяцСв послС выпуска Java 13 Π² сСнтябрС 2019 Π³ΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ соотвСтствуСт ΠΏΠ»Π°Π½Ρƒ Oracle ΠΏΠΎ выпуску ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π΄Π²ΡƒΡ… ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Java Π² Π³ΠΎΠ΄. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Java 14 — возмоТности ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚Ρ€ΡƒΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ видимости ΠΊΠΎΠ΄Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Одна ΠΈΠ· Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Java Enhancement Proposal 361 ( JEP 361 ), Π΄Π΅Π»Π°Π΅Ρ‚ Switch Expressions стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Java. Π’Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ Π·Π° счСт использования JEP 345 для выдСлСния памяти с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ NUMA для сборщика мусора Java G1.

Java Flight Recorder ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ²Π°Ρ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° событий

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Java Development Kit являСтся функция Java Flight Recorder (JFR), которая прСдоставляСт инструмСнт, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ прилоТСния Java Π² диагностичСских цСлях. Π’ Java 14 Π² Java Flight Recorder появилась новая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Β«ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ²Π°Ρ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° событий JFR ( JEP 349 ) — это новая функция Π² Java 14, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ, я Π΄ΡƒΠΌΠ°ΡŽ, люди смогут ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сразу», — сказал Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ ITPro Today Π–ΠΎΡ€ΠΆ Π‘Π°Π°Π±, Π²ΠΈΡ†Π΅-ΠΏΡ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java Π² Oracle. .Β«Π­Ρ‚ΠΎ мСняСт историчСский способ использования Π΄Π°Π½Π½Ρ‹Ρ… Java Flight Recorder, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся своСго Ρ€ΠΎΠ΄Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ, Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ доступСн ΠΊΠ°ΠΊ своСго Ρ€ΠΎΠ΄Π° ΠΏΠΎΡ‚ΠΎΠΊ событий, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈΒ».

Богласно Saab, ΠΏΠΎΡ‚ΠΎΠΊ событий

JFR ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java (JVM), Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ локально ΠΈΠ»ΠΈ Π² ΠΎΠ±Π»Π°ΠΊΠ΅. Он Π΄ΠΎΠ±Π°Π²ΠΈΠ», Ρ‡Ρ‚ΠΎ новая функция ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит Π²ΠΎ врСмя выполнСния прилоТСния Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ NullPointerExceptions

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° новая функция Π² Java 14 — JEP 358 для ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ NullPointerExceptions. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля — это распространСнный Ρ‚ΠΈΠΏ ошибки кодирования, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² ΠΊΠΎΠ΄Π΅ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

Β«Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ люди ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°ΡŽΡ‚, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с этим быстрСС ΠΈ эффСктивнСС», — сказал Π‘Π°Π°Π±.

Java 15 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠ΅ вСрсии

Java 14 Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ряд Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° стадии ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ просмотра ΠΈΠ»ΠΈ ΠΈΠ½ΠΊΡƒΠ±Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ станут достаточно Π·Ρ€Π΅Π»Ρ‹ΠΌΠΈ для ΠΏΠΎΠ»Π½ΠΎΠΉ стандартной доступности. Одной ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ являСтся Packaging Tool ( JEP 343 ), которая сСйчас находится Π½Π° стадии ΠΈΠ½ΠΊΡƒΠ±Π°Ρ†ΠΈΠΈ.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ прилоТСния Java. По словам Saab, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ срСду выполнСния, Ρ‚Π°ΠΊΡƒΡŽ ​​как Java Runtime Environment (JRE), ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ ΠΊΠΎΠ΄Π° прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, JEP 343 Π΄Π°Π΅Ρ‚ людям способ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ всС это вмСстС.

Β«Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ jlink для создания ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠΉ срСды выполнСния, которая настраиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для вашСго прилоТСния ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽΒ», — сказал ΠΎΠ½. Β«Π—Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ инструмСнт, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС это Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅Β».

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java ΠΈ Π΅Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ JVM?

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java (JVM) — это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт срСду выполнСния для управлСния ΠΊΠΎΠ΄ΠΎΠΌ Java ΠΈΠ»ΠΈ прилоТСниями. Он ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык. JVM являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Java Run Environment (JRE). Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования компилятор создаСт ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ систСмы. Однако компилятор Java создаСт ΠΊΠΎΠ΄ для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, извСстной ΠΊΠ°ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ JVM

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΠΎΠ΄ Java прСобразуСтся Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄. Π­Ρ‚ΠΎΡ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ интСрпрСтируСтся Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ….

ΠœΠ΅ΠΆΠ΄Ρƒ хост-систСмой ΠΈ источником Java Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ являСтся ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ языком.

JVM Π² Java ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ пространства памяти.

Π Π°Π±ΠΎΡ‚Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java (JVM)

Π’ этом руководствС ΠΏΠΎ JVM Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅:

АрхитСктура JVM

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² этом руководствС ΠΏΠΎ JVM Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся с Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ JVM. АрхитСктура JVM Π² Java содСрТит Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов, ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ выполнСния ΠΈ Ρ‚. Π”. АрхитСктура Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java

1) ClassLoader

Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов — это подсистСма, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² классов. Он выполняСт Ρ‚Ρ€ΠΈ основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ.Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, связываниС ΠΈ инициализация.

2) ΠžΠ±Π»Π°ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

ΠžΠ±Π»Π°ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² JVM Ρ…Ρ€Π°Π½ΠΈΡ‚ структуры классов, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅, постоянный ΠΏΡƒΠ» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΈ ΠΊΠΎΠ΄ для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

3) ΠšΡƒΡ‡Π°

ВсС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, связанныС с Π½ΠΈΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра ΠΈ массивы хранятся Π² ΠΊΡƒΡ‡Π΅. Π­Ρ‚Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ являСтся ΠΎΠ±Ρ‰Π΅ΠΉ ΠΈ раздСляСтся ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

4) Π―Π·Ρ‹ΠΊΠΎΠ²Ρ‹Π΅ стСки JVM

Π―Π·Ρ‹ΠΊΠΎΠ²Ρ‹Π΅ стСки Java хранят Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΈΡ… частичныС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ свой собствСнный стСк JVM, создаваСмый ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с созданиСм ΠΏΠΎΡ‚ΠΎΠΊΠ°. Новый Ρ„Ρ€Π΅ΠΉΠΌ создаСтся всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈ удаляСтся, ΠΊΠΎΠ³Π΄Π° процСсс Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½.

5) РСгистры ПК

РСгистры ПК хранят адрСс инструкции Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java, которая выполняСтся Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π’ Java ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ свой ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ рСгистр ПК.

6) Π‘Ρ‚Π΅ΠΊΠΈ собствСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Π‘Ρ‚Π΅ΠΊΠΈ собствСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² содСрТат инструкции собствСнного ΠΊΠΎΠ΄Π°, Π² зависимости ΠΎΡ‚ собствСнной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Он написан Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ языкС вмСсто Java.

7) ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ выполнСния

Π­Ρ‚ΠΎ Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для тСстирования оборудования, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈΠ»ΠΈ Ρ†Π΅Π»Ρ‹Ρ… систСм. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ выполнСния тСста Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ нСсСт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ тСстируСмом ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅.

8) Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ собствСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ собствСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² — это срСда программирования. Он позволяСт Java-ΠΊΠΎΠ΄Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся Π² JVM, Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ собствСнныС прилоТСния.

9) Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ собствСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

БобствСнныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ — это Π½Π°Π±ΠΎΡ€ собствСнных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (C, C ++), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ выполнСния.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ компиляции ΠΈ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Π°ΠΌ потрСбуСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

1) Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ — Для Π²Π²ΠΎΠ΄Π° вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠ½ΠΎΡ‚

2) ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ — для прСобразования вашСй многоязыковой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

3) ΠšΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ — для объСдинСния ссылок Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² вашСй основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ вмСстС.

4) Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ — для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² с вашСго Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ устройства, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ТСсткий диск, Ρ„Π»ΡΡˆ-Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŒ, ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диск, Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ для выполнСния. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° выполняСтся автоматичСски, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ выполняСтС свой ΠΊΠΎΠ΄.

5) Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ — ЀактичСскоС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обрабатываСтся вашСй ОБ ΠΈ процСссором.

Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· этого, просмотритС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²ΠΈΠ΄Π΅ΠΎ ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ JVM ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ JVM (Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java).

НаТмитС здСсь, Ссли Π²ΠΈΠ΄Π΅ΠΎ нСдоступно.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ компиляции ΠΈ выполнСния ΠΊΠΎΠ΄Π° C

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ процСсс компиляции Java Π² Java.Π”Π°Π²Π°ΠΉΡ‚Π΅ сначала ΠΊΡ€Π°Ρ‚ΠΊΠΎ рассмотрим процСсс компиляции ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π² C.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² основном Π²Ρ‹ Π²Ρ‹Π·Π²Π°Π»ΠΈ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f1 ΠΈ f2. Основная функция хранится Π² Ρ„Π°ΠΉΠ»Π΅ a1.c.

Ѐункция f1 хранится Π² Ρ„Π°ΠΉΠ»Π΅ a2. c

Ѐункция f2 хранится Π² Ρ„Π°ΠΉΠ»Π΅ a3.c

ВсС эти Ρ„Π°ΠΉΠ»Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ a1.c, a2.c ΠΈ a3.c, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ компилятору . Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ — ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом Π±ΡƒΠ΄Π΅Ρ‚ объСдинСниС всСх этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½.exe-Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°. ΠšΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ всС эти Ρ„Π°ΠΉΠ»Ρ‹ вмСстС ΠΈ создаст Ρ„Π°ΠΉΠ» .exe.

Π’ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°-Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Ρ„Π°ΠΉΠ» .exe Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ для выполнСния.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Java Π² Java VM

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² этом руководствС ΠΏΠΎ JVM Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° процСсс для JAVA. Π’ вашСм основном Ρƒ вас Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° f1 ΠΈ f2.

  • Основной ΠΌΠ΅Ρ‚ΠΎΠ΄ хранится Π² Ρ„Π°ΠΉΠ»Π΅ a1.java
  • f1 хранится Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠ°ΠΊ a2.java
  • f2 хранится Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠ°ΠΊ a3.java

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ скомпилируСт Ρ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΈ создаст 3 ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΉΠ»Π° .class, состоящих ΠΈΠ· ΠΊΠΎΠ΄Π° BYTE. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ C, связываниС Π½Π΅ выполняСтся .

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java находится Π² ΠžΠ—Π£. Π’ΠΎ врСмя выполнСния с использованиСм Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° классов Ρ„Π°ΠΉΠ»Ρ‹ классов пСрСносятся Π² ΠžΠ—Π£. БАЙВ-ΠΊΠΎΠ΄ провСряСтся Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΉ бСзопасности.

Π—Π°Ρ‚Π΅ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ выполнСния ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π² собствСнный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ€Π°Π· воврСмя компиляции.Π­Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· основных ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Java Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•. JIT ΠΈΠ»ΠΈ своСврСмСнный компилятор являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java (JVM). Он ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, которая ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ выполняСт Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Java являСтся ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ языком?

Π―Π·Ρ‹ΠΊΠΈ программирования ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ

  • Π―Π·Ρ‹ΠΊ высокого уровня ΠŸΡ€ΠΈΠΌΠ΅Ρ€. C ++, Java
  • Π―Π·Ρ‹ΠΊΠΈ срСднСго уровня ΠŸΡ€. C
  • Π―Π·Ρ‹ΠΊ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня Ex Assembly
  • , Π½Π°ΠΊΠΎΠ½Π΅Ρ†, самый Π½ΠΈΠ·ΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ машинного языка.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ уровня языка Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прСобразования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° C ++ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ java ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ высокоуровнСвый ΠΊΠΎΠ΄ java Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ являСтся Ρ‚ΠΈΠΏΠΎΠΌ машинного ΠΊΠΎΠ΄Π°).

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык программирования Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ ΡƒΡ€ΠΎΠ²Π½Π΅ . ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прСобразования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java Π² C ++.

Π’ Java Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Just In Time Code ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π² собствСнный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π½Π° Ρ‚Π΅Ρ… ΠΆΠ΅ уровнях программирования.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Java являСтся ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ, Ρ‚Π°ΠΊ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ языком.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Java Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ?

Π”Π²Π΅ основныС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Java:

  1. ДинамичСскоС связываниС: Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ C, связываниС выполняСтся Π²ΠΎ врСмя выполнСния, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° запускаСтся Π½Π° Java.
  2. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния: ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² собствСнный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ выполняСтся Π²ΠΎ врСмя выполнСния Π² Java, Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ большС сниТаСт ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ

Однако послСдняя вСрсия Java Ρ€Π΅ΡˆΠΈΠ»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΡƒΠ·ΠΊΠΈΡ… мСст Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ.

Π‘Π²ΠΎΠ΄ΠΊΠ° :

  • Полная Ρ„ΠΎΡ€ΠΌΠ° JVM — это Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java. JVM Π² Java — это Π΄Π²ΠΈΠΆΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ управляСт ΠΊΠΎΠ΄ΠΎΠΌ Java. Он ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык.
  • АрхитСктура JVM Π² Java содСрТит Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов, ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ выполнСния ΠΈ Ρ‚. Π”.
  • Π’ JVM ΠΊΠΎΠ΄ Java компилируСтся Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄. Π­Ρ‚ΠΎΡ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ интСрпрСтируСтся Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ….
  • JIT — это компилятор Just-in-time. JIT являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java (JVM).Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ускорСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния.
  • По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ компиляторами, JVM Π² Java ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅.

JIVE: Java Interactive Visualization Environment

JIVE — это интСрактивная срСда выполнСния для
Π—Π°Ρ‚ΠΌΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ
обСспСчиваСт Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java
Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… уровнях Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Как Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Java-программисты ΠΈΠ·Π²Π»Π΅ΠΊΡƒΡ‚ Π²Ρ‹Π³ΠΎΠ΄Ρƒ ΠΈΠ·
Π‘ΠΎΠ³Π°Ρ‚Ρ‹Π΅ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… структур ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² JIVE
взаимодСйствиС, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΌΠ΅Π½ΠΈΠ΅ ΡˆΠ°Π³Π°Ρ‚ΡŒ Π²ΠΏΠ΅Ρ€Π΅Π΄
ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ Π² исполнСнии.

JIVE обСспСчиваСт ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡƒΡŽ систСму ΠΏΠΎ структурам Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚
Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ошибки, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ истории выполнСния
Π±Π΅Π· нСобходимости Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄.

JIVE ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, обСспСчивая ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅
Ρ€Π°Π±ΠΎΡ‚Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Java. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ
Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ спСциалист ΠΏΠΎ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΌΠΎΠ³ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°
части ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ.

JIVE ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ большиС выполнСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°ΠΌ ΠΈ динамичСского срСза.

JIVE ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ со стандартным JDK ΠΈΠ»ΠΈ Android SDK.

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

JIVE ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΊΠ°ΠΊ состояниС выполнСния, Ρ‚Π°ΠΊ ΠΈ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ
ΠΌΠ°Π½Π΅Ρ€Π°. БостояниС выполнСния визуализируСтся ΠΊΠ°ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²,
ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ структуры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… контСкстах ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
Π˜ΡΡ‚ΠΎΡ€ΠΈΡ Π·Π²ΠΎΠ½ΠΊΠΎΠ² прСдставлСна ​​в Π²ΠΈΠ΄Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ схСмы ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ
исполнСниС Ρ€Π΅Π·ΡŒΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ,
Ρ€Π°Π·ΡŠΡΡΠ½Π΅Π½ΠΈΠ΅ взаимодСйствий с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходят Π²ΠΎ врСмя выполнСния.Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹
ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½ для отобраТСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, относящСйся ΠΊ Π·Π°Π΄Π°Ρ‡Π΅, Π½Π°
Ρ€ΡƒΠΊΠ°. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π° JIVE ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚
ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для абстрактного прСдставлСния истории выполнСния.

ΠžΡ‚Π»Π°Π΄ΠΊΠ° Π½Π° основС запросов

Врадиционная ΠΎΡ‚Π»Π°Π΄ΠΊΠ° — это ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ процСсс , Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ
программист Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ
шаг Π·Π° шагом ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π·Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ ошибки. Π’
Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², JIVE ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄
ΠΊ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
прСдоставлСниС Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° запросов ΠΏΠΎ всСму
история выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ стСк Π½Π΅Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².Запросы Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с использованиСм исходного ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹
ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² Π²ΠΈΠ΄Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ ΠΊ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°ΠΌ. JIVE Ρ‚Π°ΠΊΠΆΠ΅
ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ динамичСскоС Π½Π°Ρ€Π΅Π·Π°Π½ΠΈΠ΅ для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
ΠΈ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΡŒΡ‚Π΅ΡΡŒ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ошибок.

ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ шаг

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

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ состояния ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° имущСства

Π’
Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ состояний позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ модСль с ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ состояниСм
ΠΈΠ· трассировки выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ JIVE, ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ свойства ΠΎΠΊΠΎΠ»ΠΎ
эта модСль.Π­Ρ‚ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π° прСдставлСния: прСдставлСниС Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ состояний,
ΠΈ просмотр ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ свойств. Π’ прСдставлСнии Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ состояний ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ JIVE ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ поля ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹
ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€ состояния. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠ°Ρ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° состояний ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ прогрСсс
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ состояния для этих ΠΏΠΎΠ»Π΅ΠΉ. Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ состояний ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½Π½ΠΎΠΌ
Ρ„ΠΎΡ€ΠΌΠ°, ΡƒΠΊΠ°Π·Π°Π² ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ абстракции ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ‡Π΅Ρ€Π΅Π· простоС тСкстовоС ΠΏΠΎΠ»Π΅. Π²
ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ Property Checker, свойства ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
тСкстовоС ΠΏΠΎΠ»Π΅.Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ свойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ всС государства, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅
состояния, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ свойствам, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡƒΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ состояниями ΠΌΠΎΠ³ΡƒΡ‚
ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простого языка спСцификации свойств.

областСй Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Java

ΠžΠ±Π»Π°ΡΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… срСды выполнСния Java

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: — ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ хакСрскиС Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ здСсь: — Π‘Ρ‚Π°Ρ‚ΡŒΡ

Π’ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ JVM выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ.НСкоторыС области Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния относятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ список Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… областСй Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния: —

1. Heap
2. Stack
3. Pc Register
4. Method Area
5. БобствСнный стСк

1. HEAP: —
ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠΊΡƒΡ‡ΠΈ создаСтся JVM ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠΊΡƒΡ‡ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ доступна для любого ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ Π½Π° Ρ‚Ρ€ΠΈ поколСния МолодоС ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ , Π‘Ρ‚Π°Ρ€ΠΎΠ΅ ΠΈ PermGen (постоянноС ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅).Когда ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создаСтся, ΠΎΠ½ сначала ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² МолодоС ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ (особСнно Π² пространство Π­Π΄Π΅ΠΌΠ°), ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΡ‚Π°Ρ€Π΅ΡŽΡ‚, Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ½ пСрСмСщаСтся Π² Π‘Ρ‚Π°Ρ€ΠΎΠ΅ / ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅. Π’ пространствС PermGen хранятся всС статичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра ΠΏΠ°Ρ€ имя-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (ссылки Π½Π° имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°). НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ структуру ΠΊΡƒΡ‡ΠΈ java.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΡƒΡ‡ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² JVM, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° изобраТСниях. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ простой класс HackTheJava, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ свою ΠΏΠ°ΠΌΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ: —

  java -Xms = 1M -XmX = 2M «Имя класса»
  

2.Π‘Ρ‚Π΅ΠΊ: —
Π‘Ρ‚Π΅ΠΊ создаСтся с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, созданным ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. Он связан ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΅ΡΡ‚ΡŒ свой стСк. ВсС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ хранятся Π² стСкС. Π•Π³ΠΎ Тизнь зависит ΠΎΡ‚ ΠΆΠΈΠ·Π½ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠΈΠ²Ρ‹ΠΌ, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π•Π³ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ: —

  java -Xss = 512M «Имя класса»
  

ΠŸΡ€ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ стСка Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ StackOverFlow .

3. РСгистр ПК
Он Ρ‚Π°ΠΊΠΆΠ΅ связан своим ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ.Π’ основном это адрСс Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ инструкции, которая выполняСтся. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, зависят ΠΎΡ‚ рСгистра ПК. Он ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ инструкции ΠΈ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ для собствСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это дСлаСтся для отслСТивания инструкций.

4. ΠžΠ±Π»Π°ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°
Π­Ρ‚ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ всСми ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Heap. Он создаСтся ΠΏΡ€ΠΈ запускС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java. Он содСрТит ΠΊΠΎΠ΄, фактичСски скомпилированный ΠΊΠΎΠ΄, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ поля.ΠŸΡƒΠ» констант Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Ρ‚Π°ΠΊΠΆΠ΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ области ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠŸΠ°ΠΌΡΡ‚ΡŒ для Π½Π΅Π³ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ выдСляСтся JVM ΠΈ ΠΏΡ€ΠΈ нСобходимости ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π°. ΠŸΡƒΠ» констант Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния — это прСдставлСниС констант для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса. Он содСрТит всС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²ΠΎ врСмя компиляции, ΠΈ ссылки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π΅ΡˆΠ΅Π½Ρ‹ Π²ΠΎ врСмя выполнСния.

5. Π‘Ρ‚Π΅ΠΊ собствСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²
БобствСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ — это ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, написанныС Π½Π° языках, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ java. Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ JVM Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ собствСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ стСки.Он Ρ‚Π°ΠΊΠΆΠ΅ связан с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. ΠšΠΎΡ€ΠΎΡ‡Π΅ говоря, ΠΎΠ½ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ стСк, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для собствСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

  класс ΠŸΡ€ΠΈΠΌΠ΅Ρ€
{
        int instance_variable = 0;
        статичСский int static_variable = 0;
        void func (int a)
        {
            int local_variable = 0;
            Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ;
        }
}
  

НадСюсь, Π²Π°ΠΌ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ эта ΡΡ‚Π°Ρ‚ΡŒΡ. Бпасибо

Π‘Ρ€Π΅Π΄Π° выполнСния Java 8

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ App Engine Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Π΅Π±-прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Google
ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠ°Ρ инфраструктура ΠΈ сСрвисы.App Engine запускаСт вашС Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
с использованиСм Java 8 JVM. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
Π”Π²ΠΈΠΆΠΎΠΊ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ классы сСрвлСтов вашСго прилоТСния для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запросов ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ
ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π² этой срСдС.

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° App Engine прСдоставляСт мноТСство встроСнных
API-сСрвисы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅
ваш ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ. Π’Π°ΡˆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ
Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π²
Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹.

Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ срСды выполнСния Java 8 для вашСго прилоТСния

Π§Ρ‚ΠΎΠ±Ρ‹ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ использовало срСду выполнСния Java 8, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку
Π² ваш appengine-web.xml Ρ„Π°ΠΉΠ»:

   java8 
  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ прилоТСния App Engine, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ использовали
срСда выполнСния Java 7 Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² срСдС выполнСния Java 8, просто сдСлав это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.

API App Engine для Java прСдставлСн appengine-api - *. Jar
Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² SDK App Engine ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ Cloud SDK
(Π³Π΄Π΅ * прСдставляСт Π²Π΅Ρ€ΡΠΈΡŽ API ΠΈ SDK App Engine).

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. Автономная вСрсия SDK App Engine, доступная ΠΊΠ°ΠΊ
ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ рСкомСндуСтся.Π’Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ инструмСнты Π½Π° основС Cloud SDK.

Π’Ρ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ API, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² этот JAR Π²
ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ прилоТСния WEB-INF / lib / ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Maven для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ зависимостСй. Если Π½ΠΎΠ²Ρ‹ΠΉ
Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π° вСрсия срСды выполнСния Java, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ внСсСны измСнСния,
нСсовмСстимы с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ прилоТСниями, эта срСда Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ
Π½ΠΎΠΌΠ΅Ρ€ основной вСрсии.

ИспользованиС Maven для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ зависимостСй

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Maven для управлСния всСми зависимостями.НапримСр, это
pom.xml запись Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ App Engine API
( Rappengine-api-1.0-sdk ), доступный Π² Maven Central:

 <Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ>
     com.google.appengine 
     appengine-api-1.0-sdk 
     1.9.86 
 

ОК

ΠŸΠ΅ΡΠΎΡ‡Π½ΠΈΡ†Π°

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

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ СдинствСнноС мСсто, Π³Π΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, — это ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ / tmp .
Π€Π°ΠΉΠ»Ρ‹ Π² / tmp Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π²Π°ΡˆΠ΅ΠΌΡƒ экзСмпляру. Π€Π°ΠΉΠ»Ρ‹
хранящиСся Π² этом мСстС доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для этого экзСмпляра ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для
врСмя ΠΆΠΈΠ·Π½ΠΈ этого ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ экзСмпляра.

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ способ для вашСго прилоТСния ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ рСсурсов — это ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹
Π²Ρ‹ ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ WEB-INF , Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅ ΠΈΡ… ΠΈΠ· своСго прилоТСния
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Class.getResource () , ServletContext.getResource () ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.
По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС Ρ„Π°ΠΉΠ»Ρ‹ Π² WAR ΡΠ²Π»ΡΡŽΡ‚ΡΡ Β«Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ рСсурсов». Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ·
для этого Π½Π°Π±ΠΎΡ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„Π°ΠΉΠ» appengine-web.xml .

Класс ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° JAR, Π·Π°ΠΊΠ°Π·

Иногда ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ„Π°ΠΉΠ»Ρ‹ JAR
просканированы Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ классов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ классов.Π’
Π’ этих случаях ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдоставлСн ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ JAR ΠΏΡƒΡ‚Π΅ΠΌ добавлСния
элСмСнт, содСрТащий элСмСнтов Π²
Ρ„Π°ΠΉΠ» appengine-web.xml . НапримСр:

  <конфигурация-Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° классов>
  <спСцификатор-ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° filename = "mailapi.jar" />

  

Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ « mailapi.jar » ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» JAR, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ поиск классов,
ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ находятся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ war / WEB-INF / classes / .

Если ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹ΠΌ являСтся нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ² JAR, ΠΈΡ… исходный порядок Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (с
ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ) Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, порядок
сами элСмСнты значСния Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚.

Нитки

Π’ срСдС выполнСния Java 8 Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ App Engine
ThreadManager API
ΠΈ встроСнныС API Java, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ new Thread () .
Π’ настоящСС врСмя, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ API-интСрфСйсы App Engine ( com.google.appengine.api. * ),
Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ эти API ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° запроса ΠΈΠ»ΠΈ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°, созданного с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
API ThreadManager.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ API создания ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Java,
Cloud Trace Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ
ID запроса ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π’ настоящСС врСмя Google Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°Π΄ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚

Если Π²Ρ‹ создаСтС ThreadPoolExecutor с currentRequestThreadFactory () , Ρ‚ΠΎΠ³Π΄Π°
Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ()
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ явно Π²Ρ‹Π·Π²Π°Π½ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ запроса сСрвлСта.Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС
Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Π½Π΅Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ запроса ΠΈ сбой сСрвСра ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ для вас ThreadPoolExecutors.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€
thread.interrupt () .

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ запрос ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ 50 ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ запросов API App Engine.

ΠŸΡ€ΠΈ использовании ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ высокого уровня
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹,
Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Executor ΠΈ Runnable .Они заботятся ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ‚ΠΎΠ½ΠΊΠΈΡ…, Π½ΠΎ
Π²Π°ΠΆΠ½Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ
ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡ
ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ
бухгалтСрия.

МаксимальноС количСство ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², созданных
App Engine API — 10 Π½Π° экзСмпляр. (Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ распространяСтся Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅
ΠŸΠΎΡ‚ΠΎΠΊΠΈ Java, Π½Π΅ связанныС с API App Engine.)

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Google Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ Π²ΠΎ всСх Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π° основС Cloud SDK, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚
Maven,
Gradle,
Intellij ΠΈ
Π—Π°Ρ‚ΠΌΠ΅Π½ΠΈΠ΅.

SDK App Engine для Java (с
Плагин Maven и
Плагин Gradle
support) Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ поддСрТиваСтся ΠΈ рСкомСндуСтся для ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅
Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρƒ Π½Π° инструмСнты Π½Π° основС Cloud SDK.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ IDE

Cloud Tools for Eclipse добавляСт Π½ΠΎΠ²Ρ‹Π΅ мастСра ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ
ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ вашСй Eclipse IDE для
ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ App Engine. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ свои ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ App Engine
ΠΆΠΈΡ‚ΡŒ Π² производство ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ Eclipse.

Cloud Tools for IntelliJ позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ
ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ App Engine Π²Π½ΡƒΡ‚Ρ€ΠΈ IntelliJ IDEA.
Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ свои ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ App Engine Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π±Π΅Π·
выходя ΠΈΠ· IDE.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ инструмСнты сборки

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ Π΄Π²ΠΈΠΆΠΊΠ° для Apache Maven ΠΈΠ»ΠΈ Gradle:

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π‘Π΅Ρ€Π²Π΅Ρ€ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
запускаСт вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° локальном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ
тСстированиС.Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ слуТбы Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π’
сСрвСр Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ для Datastore
индСксы Π½Π° основС запросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ выполняСт Π²ΠΎ врСмя тСстирования.

AppCfg

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ appcfg Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ
устарСло. Π’Ρ‹
слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ инструмСнт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Cloud SDK gcloud ΠΈ
Maven ΠΈ
ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ Gradle, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚
Ρ‚Π΅ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ инструмСнтов SDK App Engine, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ AppCfg.

AppCfg — это
Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состав Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠ³ΠΎ SDK App Engine для Java.Π­Ρ‚ΠΎ
ΠΌΠ½ΠΎΠ³ΠΎΡ†Π΅Π»Π΅Π²ΠΎΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ взаимодСйствиС с вашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки
Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° App Engine. AppCfg ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²
App Engine ΠΈΠ»ΠΈ просто ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ индСкс Datastore
ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ индСксы ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π°. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚
Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΆΡƒΡ€Π½Π°Π»Π° прилоТСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ своСго прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ
ваши собствСнныС инструмСнты.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°

Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° вашСго прилоТСния большС всСго влияСт Π½Π° количСство экзСмпляров.
Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для обслуТивания вашСго Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°.Если Π²Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ запросы быстро, СдинствСнный экзСмпляр
ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ мноТСство запросов.

ΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ экзСмпляры ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ запрос.
Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, сущСствуСт прямая Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΈ количСством
запросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° экзСмплярС Π² сСкунду. НапримСр, 10 мс
Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π°Π²Π½Π° 100 запросам Π² сСкунду Π½Π° экзСмпляр.

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ экзСмпляры ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ мноТСство ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… запросов. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚Π°ΠΌ
это прямая Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ потрСбляСмым процСссором ΠΈ количСством
запросов / сСк.

ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Java
ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…
запросы, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ
ΠΎΠ΄ΠΈΠ½ экзСмпляр ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ запросы, оТидая Π΄Ρ€ΡƒΠ³ΠΈΡ… запросов ΠΊ
ΠΏΠΎΠ»Π½Ρ‹ΠΉ. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сокращаСт количСство экзСмпляров вашСго прилоТСния
трСбуСтся, Π½ΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для многопоточности.

НапримСр, Ссли B4
ΠΏΡ€ΠΈΠΌΠ΅Ρ€
(ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ 2,4 Π“Π“Ρ†) потрСбляСт 10 ΠΌΠ»Π½ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π½Π° запрос, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ 240
запросов / сСк / экзСмпляр. Если ΠΎΠ½ потрСбляСт 100 ΠΌΠ»Π½ Ρ†ΠΈΠΊΠ»ΠΎΠ² / запрос, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ 24
запросов / сСк / экзСмпляр. Π­Ρ‚ΠΈ числа ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ случаСм, Π½ΠΎ достаточно
рСалистично с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° инстансС.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды

Π‘Ρ€Π΅Π΄Π° выполнСния устанавливаСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды:

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ срСды ОписаниС
GAE_APPLICATION

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ вашСго прилоТСния App Engine.
Π­Ρ‚ΠΎΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠΌΠ΅Π΅Ρ‚ прСфикс « ΠΊΠΎΠ΄ Ρ€Π΅Π³ΠΈΠΎΠ½Π° ~».
Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«e ~Β» для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Ρ… Π² Π•Π²Ρ€ΠΎΠΏΠ΅.
GAE_DEPLOYMENT_ID Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ развСртывания.
GAE_ENV Π‘Ρ€Π΅Π΄Π° App Engine. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π° стандарт .
GAE_INSTANCE Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ экзСмпляра, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π² настоящСС врСмя Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ваша слуТба.
GAE_RUNTIME Π‘Ρ€Π΅Π΄Π° выполнСния, указанная Π² Ρ„Π°ΠΉΠ»Π΅ app.yaml .
GAE_SERVICE Имя слуТбы, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ .yaml Ρ„Π°ΠΉΠ». Если имя слуТбы Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, устанавливаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ .
GAE_VERSION ΠœΠ΅Ρ‚ΠΊΠ° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсии вашСй слуТбы.
GOOGLE_CLOUD_PROJECT Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, связанный с вашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
ПОРВ ΠŸΠΎΡ€Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ HTTP-запросы.

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды.yaml Ρ„Π°ΠΉΠ»,
Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ значСния ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСльзя.

.

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

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