Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ JVM? Знакомство с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной Java

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π€ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина

Java virtual machine (JVM) β€” это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° для выполнСния ΠΈ запуска Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° основС Java. Π’ основС JVM Π»Π΅ΠΆΠΈΡ‚ простая ΠΈ гСниальная идСя, которая всСгда останСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²Π΅Π»ΠΈΡ‡Π°ΠΉΡˆΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² программирования Π² стилС ΠΊΡƒΠ½Π³-Ρ„Ρƒ. JVM ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассказываСм, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ JVM, для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ эта тСхнология ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½Π° являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Java. ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» основан Π½Π° ΡΡ‚Π°Ρ‚ΡŒΠ΅ Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Matthew Tyson Β«What is the JVM? Introducing the Java Virtual MachineΒ».

Для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Java virtual machine

JVM ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π’ΠΎ врСмя Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии Java Π² 1995 Π³ΠΎΠ΄Ρƒ всС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ писались для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Π° ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ управлял Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ появлСниС JVM стало Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠ΅ΠΉ Π½Π° Ρ€Ρ‹Π½ΠΊΠ΅.

БущСствуСт Π΄Π²Π° основных опрСдСлСния JVM β€” тСхничСскоС ΠΈ повсСднСвноС:

Когда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ говорят ΠΎ JVM, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ имССтся Π² Π²ΠΈΠ΄Ρƒ процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся Π½Π° нашСм устройствС, особСнно Π½Π° сСрвСрС β€” ΠΎΠ½ управляСт ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ использованиС рСсурсов Java-прилоТСния.

ΠšΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈ обслуТиваСт JVM?

На сСгодняшний дСнь JVM массово ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ развиваСтся Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… β€” ΠΊΠ°ΠΊ коммСрчСских, Ρ‚Π°ΠΊ ΠΈ Open Sourse. НапримСр, сущСствуСт ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ OpenJDK, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ совмСстимый Java Development Kit, состоящий ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ· свободного ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ исходного ΠΊΠΎΠ΄Π°. ΠŸΡ€ΠΈ этом, нСсмотря Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ практичСски ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ занимаСтся корпорация Oracle.

Π‘Π±ΠΎΡ€ΠΊΠ° мусора

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

Π’ Π½Π°Ρ‡Π°Π»Π΅ сущСствования Java ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π°Π»Π°ΡΡŒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠΉ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠ΅ Π·Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ Π±Ρ‹Π»Π° Β«Close to the metalΒ» ΠΊΠ°ΠΊ C++, поэтому Π½Π΅ Π±Ρ‹Π»Π° Ρ‚Π°ΠΊΠΎΠΉ быстрой. ОсобСнно спорным ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠΈ Π½Π°Π·Ρ‹Π²Π°Π»ΠΈ процСсс сборки мусора. Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠ»ΠΈ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ сборку мусора.

Π’Ρ€ΠΈ Π³Π»Π°Π²Π½Ρ‹Π΅ части JVM

JVM состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… основных частСй: спСцификация, рСализация ΠΈ экзСмпляр. Рассмотрим ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ· Π½ΠΈΡ….

БпСцификация JVM

ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ JVM β€” спСцификация, которая Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Π½Π΅ опрСдСляСт всС Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ остаСтся максимальная свобода творчСства для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π½Π΅ΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Java, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ всСго лишь ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ class-Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² Π½ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

И Ρ‚Π°ΠΊ, всС, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π΅Π»Π°Ρ‚ΡŒ JVM β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ достаточно простым процСссом, ΠΎΠ΄Π½Π°ΠΊΠΎ это ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Π°Ρ Π·Π°Π΄Π°Ρ‡Π°, учитывая ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΈ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ языка Java.

РСализация JVM

РСализация спСцификации JVM ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ созданию Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая ΠΈ являСтся Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ JVM. По сути, сущСствуСт ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ спСцификации JVM β€” ΠΊΠ°ΠΊ коммСрчСских, Ρ‚Π°ΠΊ ΠΈ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

ЭкзСмпляр JVM

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ спСцификация JVM Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΈ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π° Π² качСствС ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΅Π΅ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π­Ρ‚Π° загруТСнная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° являСтся экзСмпляром Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

Π§Π°Ρ‰Π΅ всСго, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ говорят ΠΎ JVM, ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π²Π²ΠΈΠ΄Ρƒ экзСмпляр JVM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ: Β«ΠŸΡ€ΠΈΠ²Π΅Ρ‚, сколько памяти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ JVM Π½Π° этом сСрвСрС?Β» ΠΈΠ»ΠΈ Β«Π― Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ сдСлал Π·Π°Ρ†ΠΈΠΊΠ»Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ², Π° ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка сломало мою JVM. А вСдь это просто ошибка Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°!Β»

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ class-Ρ„Π°ΠΉΠ»ΠΎΠ² Π² JVM

ΠœΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ Ρ€ΠΎΠ»ΠΈ JVM Π² запускС Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ ΠΊΠ°ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина выполняСт свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ? Для запуска Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ JVM зависит ΠΎΡ‚ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° классов ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° выполнСния Java.

Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов Π² JVM

Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов Java являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ JVM β€” ΠΎΠ½ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ классы Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΡ… доступными для выполнСния. Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ Π»Π΅Π½ΠΈΠ²ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (lazy-loading) ΠΈ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ классов максимально эффСктивной. ΠŸΡ€ΠΈ этом использованиС Ρ‚Π°ΠΊΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² считаСтся достаточно простым процСссом.

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

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

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ» свою Ρ€Π°Π±ΠΎΡ‚Ρƒ, JVM Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ выполнСния β€” ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ JVM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ ΠΎΠ½ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ любой Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java.

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

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ систСмными рСсурсами

БистСмныС рСсурсы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° Π΄Π²Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ: ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅.

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

Помимо памяти, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ выполнСния управляСт рСсурсами Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΈ сСти. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ JVM совмСстима с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ систСмами, Ρ‚ΠΎ эта Π·Π°Π΄Π°Ρ‡Π° считаСтся достаточно слоТной. Помимо потрСбностСй ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ прилоТСния Π² рСсурсах, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ выполнСния Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ JVM: ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ΅, настоящСС, Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅

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

МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли ДТСймс Гослинг ΠΈ Π‘Ρ€Π΅Π½Π΄Π°Π½ Π­ΠΉΡ… ΠΈΠ·ΠΎΠ±Ρ€Π΅Π»ΠΈ соврСмСнноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‚ΠΎ тысячи Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π»ΠΈ ΠΈ Ρ€Π°Π·Π²ΠΈΠ»ΠΈ ΠΈΡ… ΠΈΠ΄Π΅ΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСсятилСтия. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π°Π»Π°ΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Java, Π½ΠΎ сСгодня ΠΎΠ½Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π»Π° Π΄ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… языков программирования, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Scala, Groovy ΠΈ Kotlin.

Π˜Π·ΡƒΡ‡Π°ΠΉΡ‚Π΅ Java Π½Π° Π₯СкслСтС ВступайтС Π² ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΡŽ ΠΈ ΠΈΠ·ΡƒΡ‡Π°ΠΉΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых вострСбованных Π² энтСрпрайзС языков программирования.

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

ВнутрСнности JVM, Π§Π°ΡΡ‚ΡŒ 1 β€” Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для студСнтов курса Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ JavaΒ».

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π€ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина

Π’ этой сСрии статСй я расскаТу ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Java Virtual Machine. БСгодня ΠΌΡ‹ рассмотрим ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ классов Π² JVM.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java β€” это сСрдцС экосистСмы Java-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. Она Π΄Π΅Π»Π°Π΅Ρ‚ для Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° «написано ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Π΅Π·Π΄Π΅Β» (write once run everywhere). Как ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, JVM прСдставляСт собой абстрактный ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€. Основная Π·Π°Π΄Π°Ρ‡Π° JVM β€” Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ class-Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ содСрТащийся Π² Π½ΠΈΡ… Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄.

Π’ состав JVM входят Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов (Classloader), сборщик мусора (Garbage Collector) (автоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ), ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, JIT-компилятор, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ управлСния ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассмотрим Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов (Class loader).

Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ class-Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠ°ΠΊ для вашСго прилоТСния, Ρ‚Π°ΠΊ ΠΈ для Java API. Π’ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ class-Ρ„Π°ΠΉΠ»Ρ‹ Java API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π‘Π°ΠΉΡ‚-ΠΊΠΎΠ΄ выполняСтся подсистСмой исполнСния (execution engine).

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π€ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° классов?

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° классов β€” это поиск ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² (классов ΠΈ интСрфСйсов) динамичСски Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π”Π°Π½Π½Ρ‹Π΅ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… находятся Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… class-Ρ„Π°ΠΉΠ»Π°Ρ….

Π­Ρ‚Π°ΠΏΡ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ классов

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ β€” Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов, ΠΏΠΎΠΌΠΈΠΌΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ классов, Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° поиск рСсурсов. РСсурс β€” это Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, β€œ.class” Ρ„Π°ΠΉΠ», Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, изобраТСния), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ абстрактного ΠΏΡƒΡ‚ΠΈ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ символом Β«/Β». РСсурсы ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ вмСстС с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ прилоТСния ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ классов Π² Java

Platform class loader β€” Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ (Π½Π° основС бСзопасности / Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ) ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Java SE ΠΈ JDK. НапримСр, java.sql.

Bootstrap class loader β€” Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ основныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Java SE ΠΈ JDK.

Π­Ρ‚ΠΈ Ρ‚Ρ€ΠΈ встроСнных Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° классов Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ вмСстС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Запустив этот ΠΊΠΎΠ΄ Π½Π° установлСнном Ρƒ мСня Amazon Corretto 11.0.3, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ClassLoader API Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ здСсь (JDK 11).

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

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java β€” взгляд ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ

ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java β€” взгляд ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π€ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина

РассказываСт Π ΠΎΠΌΠ°Π½ Иванов

ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠ· сСбя прСдставляСт JVM, ΠΊΠ°ΠΊ Π² Π½Π΅Ρ‘ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ исполняСтся. Π‘Ρ‚Π°Ρ‚ΡŒΡ большС ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ, Π½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π½Π΅ΠΉ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅ смогут ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ программисты. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ описано, ΠΊΠ°ΠΊ устроСн class-Ρ„Π°ΠΉΠ» ΠΈ ΠΊΠ°ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈ исполняСт Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄.

Основной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Java Π±Ρ‹Π»ΠΎ созданиС пСрСносимых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. JVM ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² пСрСносимости β€” ΠΎΠ½Π° обСспСчиваСт Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции ΠΌΠ΅ΠΆΠ΄Ρƒ скомпилированной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой. НСсмотря Π½Π° этот Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ «слой», ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ высока, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт JVM, ΠΈ ΠΎΠ½Π° сама ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹.

Рассмотрим схСму Ρ€Π°Π±ΠΎΡ‚Ρ‹ JVM Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° class-Ρ„Π°ΠΉΠ»Π°

НапишСм ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ скомпилируСм Π΅Π³ΠΎ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π·Π°Π±ΠΎΡ‚Π»ΠΈΠ²ΠΎ создаст Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ class ΠΈ помСстит Ρ‚ΡƒΠ΄Π° всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ нашСм ΠΌΠΈΠ½ΠΈ-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ для JVM. Π§Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ? Π€Π°ΠΉΠ» ΠΏΠΎΠ΄Π΅Π»Ρ‘Π½ Π½Π° Π΄Π΅ΡΡΡ‚ΡŒ сСкций, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… строго Π·Π°Π΄Π°Π½Π° ΠΈ опрСдСляСт всю структуру class-Ρ„Π°ΠΉΠ»Π°.

4–5 дСкабря, Онлайн, Π‘Π΅cΠΏΠ»Π°Ρ‚Π½ΠΎ

Π€Π°ΠΉΠ» начинаСтся со стартового (магичСского) числа: 0xCAFEBABE. Π”Π°Π½Π½ΠΎΠ΅ число присутствуСт Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ классС ΠΈ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ„Π»Π°Π³ΠΎΠΌ для JVM: с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСма ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π΅ΠΉ class-Ρ„Π°ΠΉΠ».

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π€ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина

Π‘ дСвятого Π±Π°ΠΉΡ‚Π° ΠΈΠ΄Ρ‘Ρ‚ ΠΏΡƒΠ» констант, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТатся всС константы нашСго класса. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ классС ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ΅ количСство, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ массивом находится пСрСмСнная, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π½Π° Π΅Π³ΠΎ Π΄Π»ΠΈΠ½Ρƒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡƒΠ» констант прСдставляСт ΠΈΠ· сСбя массив ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. КаТдая константа Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ элСмСнт Π² массивС. Π’ΠΎ всём class-Ρ„Π°ΠΉΠ»Π΅ константы ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ цСлочислСнным индСксом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΈΡ… ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² массивС. ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ константа ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 1, вторая константа β€” 2 ΠΈ Ρ‚. Π΄.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΏΡƒΠ»Π° констант начинаСтся с ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚Π΅Π³Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ. Π­Ρ‚ΠΎ позволяСт JVM ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠ΄ΡƒΡ‰ΡƒΡŽ Π΄Π°Π»Π΅Π΅ константу. ВсСго Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ 14 Ρ‚ΠΈΠΏΠΎΠ² констант:

Π’ΠΈΠΏ константыЗначСниС Ρ‚Π΅Π³Π°
CONSTANT_Class7
CONSTANT_Fieldref9
CONSTANT_Methodref10
CONSTANT_InterfaceMethodref11
CONSTANT_String8
CONSTANT_Integer3
CONSTANT_Float4
CONSTANT_Long5
CONSTANT_Double6
CONSTANT_NameAndType12
CONSTANT_Utf81
CONSTANT_MethodHandle15
CONSTANT_MethodType16
CONSTANT_InvokeDynamic18

НапримСр, Ссли Ρ‚Π΅Π³ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ константа являСтся строкой, JVM ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅Π³Π° 1 ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π° Ρ‚Π΅Π³ΠΎΠΌ число ΠΊΠ°ΠΊ Π΄Π»ΠΈΠ½Ρƒ массива Π±Π°ΠΉΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½ΡƒΡŽ Π½Π°ΠΌ строку ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ.

ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² Π±Π»ΠΎΠΊ с константами, JVM ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π΄Π²ΡƒΠΌ Π±Π°ΠΉΡ‚Π°ΠΌ β€” Ρ„Π»Π°Π³Π°ΠΌ доступа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, описываСт этот Ρ„Π°ΠΉΠ» класс ΠΈΠ»ΠΈ интСрфСйс, общСдоступный ΠΈΠ»ΠΈ абстрактный, являСтся Π»ΠΈ класс Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ.

ИмСна класса ΠΈ Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса хранятся Π² массивС констант, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ 4 Π±Π°ΠΉΡ‚Π° Π² Ρ„Π°ΠΉΠ»Π΅.

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

Имя Ρ„Π»Π°Π³Π°ΠšΠΎΠ΄ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅
ACC_PUBLIC0x0001ОбъявлСн ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌ
ACC_FINAL0x0010ОбъявлСн Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ
ACC_SUPER0x0020Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π»Π°Π³, Π²Π²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ Π² вСрсии Java 1.1 для совмСстимости ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² родитСля
ACC_INTERFACE0x0200ОбъявлСн интСрфСйсом
ACC_ABSTRACT0x0400ОбъявлСн абстрактным
ACC_SYNTHETIC0x1000Π—Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅
ACC_ANNOTATION0x2000ОбъявлСн Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ
ACC_ENUM0x4000ОбъявлСн пСрСчислСниСм

ΠŸΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ структуру ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ β€” Fields.

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

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ самому Π²Π°ΠΆΠ½ΠΎΠΌΡƒ мСсту Π² любом классС β€” Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π½ΠΈΡ… сосрСдоточСна вся Π»ΠΎΠ³ΠΈΠΊΠ° любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, вСсь исполняСмый Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄.

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

Π’ послСднСм Π±Π»ΠΎΠΊΠ΅ ΠΈΠ΄Ρ‘Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΌΠ΅Ρ‚Π°-информация, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ имя Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» скомпилирован. Она ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅Ρ‚. Π’ случаС ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ JVM просто ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ этот Π±Π»ΠΎΠΊ.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° классов

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π²ΡˆΠΈΡΡŒ с ΠΎΠ±Ρ‰Π΅ΠΉ структурой Ρ„Π°ΠΉΠ»Π°, посмотрим, ΠΊΠ°ΠΊ JVM Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² JVM, класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½. Для этого ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ классы-Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ:

Π“Π»Π°Π²Π½Ρ‹ΠΉ класс прилоТСния всСгда загруТаСтся систСмным Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠΌ, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΆΠ΅ классы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°ΠΌΠΈ. Π‘Ρ‚ΠΎΠΈΡ‚ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ имя Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° создаёт ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ пространство ΠΈΠΌΡ‘Π½, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСсколько классов с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ссли ΠΎΠ½ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°ΠΌΠΈ.
ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ свои полномочия Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ поиском класса для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠ½ попытаСтся ΡƒΠ·Π½Π°Ρ‚ΡŒ, Π½Π΅ Π±Ρ‹Π» Π»ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ Π½ΡƒΠΆΠ½Ρ‹ΠΉ класс Ρ€Π°Π½ΡŒΡˆΠ΅.

ПослС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ класса начинаСтся этап Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСлится Π½Π° Ρ‚Ρ€ΠΈ части.

Класс инициализируСтся, ΠΈ JVM ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

JVM ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² классС. Π‘Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° выполняСтся, ΠΊΠΎΠ³Π΄Π° этот ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся Π² Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° β€” это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ инструкций для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java. КаТдая инструкция состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ². Код ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ дСйствиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ. ВсСго Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² Java Π±ΠΎΠ»Π΅Π΅ 200 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. ВсС ΠΊΠΎΠ΄Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 1 Π±Π°ΠΉΡ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌΠΈ, поэтому ΠΈΡ… максимальноС число Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡΠΈΡ‚ΡŒ 256 ΡˆΡ‚ΡƒΠΊ.

Π’ основС Ρ€Π°Π±ΠΎΡ‚Ρ‹ JVM находится стСк β€” основныС инструкции Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π½ΠΈΠΌ.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ умноТСния Π΄Π²ΡƒΡ… чисСл. НиТС прСдставлСн Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

На Java это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

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

ВсСго JVM ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ сСмь ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…: byte, short, int, long, float, double ΠΈ char.

Если Π±Ρ‹ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 11112, Ρ‚ΠΎ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ sipush :

Π”Π°Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ Ρ„Ρ€Π΅ΠΉΠΌΠ΅ стСка ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ нСкоторая своя Ρ‡Π°ΡΡ‚ΡŒ Π² ΠΎΠ±Ρ‰Π΅ΠΌ стСкС. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π² нашСм Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ мноТСство подстСков Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π‘ΠΎΠ»Π΅Π΅ наглядно это прСдставлСно Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π½ΠΈΠΆΠ΅:

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π€ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ стСк-Ρ„Ρ€Π΅ΠΉΠΌΠ΅ хранится массив Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈ Π΄ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠ°ΠΊ ΠΌΡ‹ сдСлали Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅, помСстив значСния 1 ΠΈ 5 Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ 1 ΠΈ 2. Π‘Ρ‚ΠΎΠΈΡ‚ΡŒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ здСсь компилятор Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π» Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ инструкции. Если Π±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² нашСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π±Ρ‹Π»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ, использовался Π±Ρ‹ ΠΊΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сохранСния значСния вмСстС с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² массивС.

Π’Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Java прСдоставляСт Π΄Π²Π° основных Π²ΠΈΠ΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²: ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляра ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляра ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ динамичСскоС (ΠΏΠΎΠ·Π΄Π½Π΅Π΅) связываниС, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ статичСскоС (Ρ€Π°Π½Π½Π΅Π΅) связываниС.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ кладётся Π½Π° стСк. Π’ΠΈΠΏΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π½ΠΈΠΆΠ΅:

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
ireturnΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π½Π° стСк Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° int
lreturnΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π½Π° стСк Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ long,
freturnΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π½Π° стСк Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ float
dreturnΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π½Π° стСк Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ double
areturnΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π½Π° стСк Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ object
returnНС измСняСт стСк

Π¦ΠΈΠΊΠ»Ρ‹

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ послСднюю часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ языка β€” Ρ†ΠΈΠΊΠ»Ρ‹. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Π²ΠΎ Ρ‡Ρ‚ΠΎ прСвратится ΠΊΠΎΠ΄, прСдставлСнный Π½ΠΈΠΆΠ΅:

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

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ интСрпрСтируСтся Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ JVM, Π½ΠΎ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ систСма Π·Π°ΠΌΠ΅Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ часто, ΠΎΠ½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ встроСнный компилятор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Ρ‹ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ‚Π΅ΠΌ самым Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ускоряя Ρ€Π°Π±ΠΎΡ‚Ρƒ прилоТСния.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ повСрхностно рассмотрСли ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° Π² JVM: class-Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΡ… Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ инструкции.

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

Java Blog

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ JVM

Java-прилоТСния Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ WORA (Write Once Run Anywhere, Пиши ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ запускай Π²Π΅Π·Π΄Π΅). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ программист ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Java Π² ΠΎΠ΄Π½ΠΎΠΉ систСмС ΠΈ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ систСмС с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Java Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ настроСк. Π­Ρ‚ΠΎ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ благодаря JVM.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π€ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина

ΠŸΠΎΠ΄ΡΠΈΡΡ‚Π΅ΠΌΠ° Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° классов (Class Loader Subsystem)

Π’ основном подсистСма Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° классов ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ‚Ρ€ΠΈ Π²ΠΈΠ΄Π° Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

БвязываниС (Linking): выполняСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ ΠΈ (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ (Initialization): Π½Π° этом этапС всСм статичСским ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈΡ… значСния, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² ΠΊΠΎΠ΄Π΅ ΠΈ статичСском Π±Π»ΠΎΠΊΠ΅ (Ссли Π΅ΡΡ‚ΡŒ). Π­Ρ‚ΠΎ выполняСтся свСрху Π²Π½ΠΈΠ· Π² классС ΠΈ ΠΎΡ‚ родитСля ΠΊ ΠΏΠΎΡ‚ΠΎΠΌΠΊΡƒ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° классов:

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: JVM слСдуСт ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ дСлСгирования-ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ классов. Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов систСмы Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ запрос Π½Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π² Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ запрос Π² Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ класса Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Если класс Π½Π°ΠΉΠ΄Π΅Π½ Π² ΠΏΡƒΡ‚ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, класс загруТаСтся, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС запрос снова пСрСдаСтся Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΡƒ классов Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΡƒ классов систСмы. НаконСц, Ссли Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов систСмы Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ класс, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ java.lang.ClassNotFoundException Π²ΠΎ врСмя выполнСния.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π€ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина

ΠŸΠ°ΠΌΡΡ‚ΡŒ JVM

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

ΠžΠ±Π»Π°ΡΡ‚ΡŒ ΠΊΡƒΡ‡ΠΈ (heap): информация ΠΎΠ±ΠΎ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… хранится Π² области ΠΊΡƒΡ‡ΠΈ. БущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ΄Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΊΡƒΡ‡ΠΈ Π½Π° JVM. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ‰ΠΈΠΉ рСсурс.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ стСка: для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° (thread) JVM создаСт ΠΎΠ΄ΠΈΠ½ стСк Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ исполнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хранится здСсь. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ этого стСка называСтся Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ записью/ΠΊΠ°Π΄Ρ€ΠΎΠΌ стСка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранятся Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ВсС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° хранятся Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠ°Π΄Ρ€Π΅. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ° стСк Π΅Π³ΠΎ выполнСния Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ JVM. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΠ±Ρ‰ΠΈΠΉ рСсурс.

РСгистры ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°: Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ адрСс Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ инструкции исполнСния ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ рСгистры ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

Π‘Ρ‚Π΅ΠΊΠΈ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° создаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ стСк. Он Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ….

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π€ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина

Π‘Ρ€Π΅Π΄Π° исполнСния

Нативный интСрфСйс Java (JNI)

Π­Ρ‚ΠΎ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ взаимодСйствуСт с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ прСдоставляСт Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (C, C++), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для выполнСния. Π­Ρ‚ΠΎ позволяСт JVM Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ C/C++ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ C/C++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ спСцифичными для Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ обСспСчСния.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Π­Ρ‚ΠΎ коллСкция Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (C, C++), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ для ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° исполнСния.

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

АрхитСктура JVM: ΠΎΠ±Π·ΠΎΡ€ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ JVM ΠΈ JVM

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! Π’ этом руководствС ΠΌΡ‹ ΠΏΠΎΠΉΠΌΠ΅ΠΌ ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Java (JVM) ΠΈ Π΅Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ. Π­Ρ‚ΠΎΡ‚ ΡƒΡ€ΠΎΠΊ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ вопросы:

1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

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

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π€ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина

Рис. 1: ΠžΠ±Π·ΠΎΡ€ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java

1.1 Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ JVM?

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π€ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина

Рис. 2: ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ JVM

1.2 Π’ΠΈΠΏΡ‹ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин Java

РСдакция Java ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java (JVM), Ρ‚.Π΅.

1.3 ВнутрСнняя Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° JVM

На схСмС ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ спСцификации JVM.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина. Π€ΠΎΡ‚ΠΎ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ java машина

Рис. 3: АрхитСктура Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π½Π° рис. 3, ΠΏΠΎΡΡΠ½ΡΡŽΡ‚ΡΡ Π½ΠΈΠΆΠ΅.

1.3.1 Класс Loader

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

Π­Ρ‚Π° подсистСма Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° ΠΏΡΡ‚ΡŒ основных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Ρ‚.Π΅.

Π­Ρ‚Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π²ΠΎ врСмя Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°.

1.3.3 ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ исполнСния

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ выполняСт Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ назначаСтся областям Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ основных ΠΏΠΎΠ΄ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

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

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

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