--- aliases: - JVM tags: - maturity/🌱 date: 2023-11-07 --- JVM (Java Virtual Machine) β€” это Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина, которая выполняСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанныС Π½Π° языкС Java, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Kotlin ΠΈ Scala. Π•Ρ‘ основная Π·Π°Π΄Π°Ρ‡Π° β€” Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ [[Java Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄|Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°]], ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ прСдставлСния ΠΌΠ΅ΠΆΠ΄Ρƒ исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ устройства. JVM Ρ‚Π°ΠΊΠΆΠ΅ управляСт ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, сборкой мусора, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ, создавая Π½Π°Π΄Ρ‘ΠΆΠ½ΡƒΡŽ срСду для выполнСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. **ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ JVM** - **ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠ½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ**. Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° любой систСмС с установлСнной JVM, Ρ‡Ρ‚ΠΎ позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. - **Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ**. JVM управляСт ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Ρ‡Π΅Ρ€Π΅Π· ΠΊΡƒΡ‡Ρƒ (heap), автоматичСски выдСляя ΠΈ освобоТдая ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ устраняСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ управлСния ΠΈ сниТаСт риск ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ. - [[gc/Garbage Collector|Π‘Π±ΠΎΡ€ΠΊΠ° мусора]] (Garbage Collection). JVM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ сборщик мусора для автоматичСского освобоТдСния памяти, занятой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ большС Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ прилоТСния. - **Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ**. JVM обСспСчиваСт бСзопасноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмы управлСния доступом, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰Π΅ΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ доступ ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ врСдоносного ΠΊΠΎΠ΄Π°. - **ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ**. JVM ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ [[../fundamental/Multithreading|ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ]], позволяя Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ прилоТСния Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ языка. Она управляСт созданиСм, синхронизациСй ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². - **Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ**. JVM прСдоставляСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Java Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ошибки Π²ΠΎ врСмя выполнСния, ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. **Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ JVM** 1. **ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ исходного ΠΊΠΎΠ΄Π° Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄** Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (.java Ρ„Π°ΠΉΠ»Ρ‹) компилируСтся компилятором Java (javac) Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ (.class Ρ„Π°ΠΉΠ»Ρ‹), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся платформонСзависимым ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ прСдставлСниСм. 2. **Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°** Класс-Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ JVM (Class Loaders) Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠ², Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Bootstrap Class Loader, Extension Class Loader ΠΈ Application Class Loader. 3. **ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°** JVM провСряСт Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ для обСспСчСния Π΅Π³ΠΎ коррСктности ΠΈ бСзопасности, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ врСдоносного ΠΊΠΎΠ΄Π°. 4. **Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡ ΠΈΠ»ΠΈ компиляция JIT** JVM ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Just-In-Time (JIT) ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, которая ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π²ΠΎ врСмя выполнСния, ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. 5. **Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°** ПослС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° JVM выполняСт Π΅Π³ΠΎ, управляя ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ, обСспСчивая Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.