Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΡ ΠΏΠ»ΡΡΡ ΠΈ ΠΌΠΈΠ½ΡΡΡ java
ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Java Native
ΠΠ·ΡΡΠΈΡΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ»ΠΎΠ² ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Java.
1. ΠΠ±Π·ΠΎΡ
Π ΡΡΠΎΠΌ ΠΊΡΠ°ΡΠΊΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° native Π² Java, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ native Π² ΠΊΠΎΠ΄ Java.
2. ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ native Π² Java
ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ native Π² Java.
ΠΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π·Π°Π²ΠΈΡΡΡΡΡ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΊΠΎΠ΄Π°, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΌΠ΅ΠΆΠ΄Ρ JNI ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
3. ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ
A ΡΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄-ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ Java (Π»ΠΈΠ±ΠΎ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, Π»ΠΈΠ±ΠΎ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ°), ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΠΊΠΎΠΌ ΠΊΠ°ΠΊ C/C++.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π΄Π»Ρ:
4. ΠΡΠΈΠΌΠ΅ΡΡ
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π² Π½Π°Ρ Java-ΠΊΠΎΠ΄.
4.1. ΠΠΎΡΡΡΠΏ ΠΊ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ Π½Π° Java
Π§ΡΠΎΠ±Ρ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π΅Π³ΠΎ, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ System.LoadLibrary.
4.2. Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π² ΠΊΠ»Π°ΡΡΠ΅ DateTimeUtils :
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π²ΡΠ²ΠΎΠ΄ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΎΡΠ°:
ΠΠ°ΠΊ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° native ΠΌΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π·Π°Π²ΠΈΡΡΡΠ΅ΠΉ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ C++).
5. ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΠΈΠ·ΡΡΠΈΠ»ΠΈ ΠΎΡΠ½ΠΎΠ²Ρ native ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ»ΠΎΠ² ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΠ° ΠΊΠΎΡΠΎΡΠΊΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ Π² Java.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π² Java ΠΈ Π³Π΄Π΅ ΠΈΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ? [ΠΡΠ±Π»ΠΈΠΊΠ°Ρ]
ΠΠ° ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΎΡΠ²Π΅Ρ Π·Π΄Π΅ΡΡ:
ΠΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΡΡΠΎ ΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, Π½ΠΎ Π³Π΄Π΅ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½?
5 ΠΎΡΠ²Π΅ΡΠΎΠ²
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π² Java ΠΈ Π³Π΄Π΅ ΠΈΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ?
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΡΠ½ΠΎ:
Main.java
main.c
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠΉΡΠ΅ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ :
ΠΡΡ ΠΎΠ΄
ΠΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ Π² Ubuntu 14.04 Ρ Oracle JDK 1.8.0_45.
ΠΡΠ°ΠΊ, ΡΡΠ½ΠΎ, ΡΡΠΎ ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ:
ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Π΄Π»Ρ:
Ρ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠΉ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ.
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡ Java ΠΈΠ· C, Π½ΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°ΡΡ JVM Π² C: ΠΠ°ΠΊ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Java ΠΈΠ· C ++?
ΠΠ΅ΡΠΎΠ΄ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² Β«ΡΠΎΠ΄Π½ΠΎΠΌΒ» ΠΊΠΎΠ΄Π΅. Π’ΠΎ Π΅ΡΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π² JVM. ΠΠ±ΡΡΠ½ΠΎ ΠΎΠ½ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C ΠΈΠ»ΠΈ C ++.
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌΠΈ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ Π·Π½Π°ΡΡ, Π³Π΄Π΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΎΠ΄Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ
Π ΠΈΠ΄Π΅Π°Π»Π΅, ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅Ρ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² Java, ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π½Π° C.
ΠΠ΅ΡΠΎΠ΄Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² ΠΊΠΎΠ΄Π΅ C.
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Java:
Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΈ ΠΏΡΠ½ΠΊΡΡ ΠΎΡΠ²Π΅ΡΡΡ Π½Π° Π²Π°Ρ Π²ΠΎΠΏΡΠΎΡ:)
ΠΠ°ΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ C ΠΈΠ»ΠΈ C ++, Π² Π²Π°ΡΠ΅ΠΌ Java-ΠΊΠΎΠ΄Π΅. ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΈΡ , ΠΊΠΎΠ³Π΄Π° Java Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π²Π°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π±Ρ Ρ ΠΏΠΈΡΠ°Π» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π΅Π³ΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠΈΠΊΠ°, Ρ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» java, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΡΠ·ΡΠΊ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ Ρ ΡΠ°ΠΊΠΆΠ΅ Ρ ΠΎΡΠΎΡΠΎ Π²Π»Π°Π΄Π΅Ρ C. Π‘ΠΊΠ°ΠΆΡ Π² ΡΠ°ΡΡΠΈ ΠΌΠΎΠ΅Π³ΠΎ ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠ½Π΅ Π½ΡΠΆΠ½Π° Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ. Π― Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π·Π½Π°Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ C ++ ΠΈ Π·Π½Π°Ρ, ΡΡΠΎ C ++ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Java, ΠΏΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π±Ρ Ρ Π½Π°ΠΏΠΈΡΠ°Π» ΡΠ²ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° C ++, ΠΎΠ½ Π±ΡΠ» Π±Ρ Π±ΡΡΡΡΠ΅Π΅. Π’Π°ΠΊΠΆΠ΅, ΡΠΊΠ°ΠΆΠ΅ΠΌ, Ρ Ρ ΠΎΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ ΠΈΠ»ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π±Ρ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² C ++ Π΅ΡΡΡ ΡΡΠΎ-ΡΠΎ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±Ρ ΠΌΠ½Π΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π² Java ΠΈ ββΠ³Π΄Π΅ ΠΈΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ?
ΠΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΡΡΠΎ ΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, Π½ΠΎ Π³Π΄Π΅ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½?
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π² Java ΠΈ ββΠ³Π΄Π΅ ΠΈΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ?
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΡΠ½ΠΎ:
Main.Java :
main.C :
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠΉΡΠ΅ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ :
ΠΡΡ ΠΎΠ΄ :
ΠΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ Π½Π° Ubuntu 14.04 Ρ Oracle JDK 1.8.0_45.
ΠΡΠ°ΠΊ, ΡΡΠ½ΠΎ, ΡΡΠΎ ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ:
ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Π΄Π»Ρ:
Ρ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠΉ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ.
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ·Π²Π°ΡΡ Java ΠΈΠ· C, Π½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ·Π΄Π°ΡΡ JVM Π² C: ΠΠ°ΠΊ Π²ΡΠ·ΡΠ²Π°ΡΡ Java ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· C++?
ΠΡΠΈΠΌΠ΅Ρ Π½Π° GitHub Π΄Π»Ρ Π²Π°Ρ, ΡΡΠΎΠ±Ρ ΠΈΠ³ΡΠ°ΡΡ Ρ.
ΠΠ΅ΡΠΎΠ΄ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² «ΡΠΎΠ΄Π½ΠΎΠΌ» ΠΊΠΎΠ΄Π΅. Π’ΠΎ Π΅ΡΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π² JVM. ΠΠ±ΡΡΠ½ΠΎ ΠΎΠ½ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C ΠΈΠ»ΠΈ C++.
ΠΠ°ΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌΠΈ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ Π·Π½Π°ΡΡ, Π³Π΄Π΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΎΠ΄Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ
Π ΠΈΠ΄Π΅Π°Π»Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅Ρ. Π Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² Java, ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ C-ΠΊΠΎΠ΄.
ΠΠ΅ΡΠΎΠ΄Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² C-ΠΊΠΎΠ΄Π΅.
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Java:
Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΈ ΠΏΡΠ½ΠΊΡΡ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π½Π° Π²Π°Ρ Π²ΠΎΠΏΡΠΎΡ π
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ C ΠΈΠ»ΠΈ C++, Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Java. ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΈΡ , ΠΊΠΎΠ³Π΄Π° Java Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π²Π°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π±Ρ Ρ ΠΏΠΈΡΠ°Π» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΅Π³ΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠΈΠΊΠ°, Ρ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Java, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΡΠ·ΡΠΊ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ Ρ ΡΠ°ΠΊΠΆΠ΅ Ρ ΠΎΡΠΎΡΠΎ Π²Π»Π°Π΄Π΅Ρ C. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π² ΡΠ°ΡΡΠΈ ΠΌΠΎΠ΅Π³ΠΎ ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠ½Π΅ Π½ΡΠΆΠ½Π° Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ. Π― Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π·Π½Π°Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ C++ ΠΈ Π·Π½Π°Ρ, ΡΡΠΎ C++ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Java, ΠΏΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π±Ρ Ρ Π½Π°ΠΏΠΈΡΠ°Π» ΡΠ²ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° C++, ΠΎΠ½ Π±ΡΠ» Π±Ρ Π±ΡΡΡΡΠ΅Π΅. Π’Π°ΠΊΠΆΠ΅, ΡΠΊΠ°ΠΆΠ΅ΠΌ, Ρ Ρ ΠΎΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ ΠΈΠ»ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² C++ Π΅ΡΡΡ ΡΡΠΎ-ΡΠΎ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±Ρ ΠΌΠ½Π΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ.
Π ΡΡΡΠΊΠΈΠ΅ ΠΠ»ΠΎΠ³ΠΈ
ΠΠ·ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ JVM, Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ», ΡΡΠΎ ΠΎΠ±Π»Π°ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°; ΡΠ°ΠΊ ΡΡΠΎ Π² ΡΡΠΎΠΌ Π²ΠΎΠΏΡΠΎΡΠ΅, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄?
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π½Π΅-java-ΠΊΠΎΠ΄ Π² ΡΡΠΎΠΌ java-ΠΊΠΎΠ΄Π΅.
ΠΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ Java.
ΠΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ abstract;, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ native ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ, ΡΡΠΎ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ΅Π»Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π½ΠΎ ΡΡΠΈ ΡΠ΅Π»Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ java, Π½ΠΎ abstract ΡΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΠ΅Π» ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠΎΠ³Π΄Π° Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ Java, Π΅Π³ΠΎ ΡΠΌΡΡΠ» ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΡΠ°ΡΠΈΠΊΠ° ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ Π½Π°ΠΏΡΡΠΌΡΡ, Π±Π΅Π· ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ°, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ;
Π’ΡΠ΅ΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ, ΠΈ JVM Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄ Π²Ρ ΠΎΠ΄ΠΎΠΌ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° (ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Java).
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΏ Java, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ;
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ, ΡΡΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ Java;
ΠΠΎΠ³Π΄Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΈΠΏΡ, ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ ΡΡΠΈΡ Π½Π΅ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΈΠΏΠΎΠ², Π½ΠΎ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° Java, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ; ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Java
Π‘ΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠ΅ ΡΡΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠ΅ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π½Π°ΡΡ, ΡΡΠΎ ΠΎΠ½ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄.
JVM Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ Π²ΡΠ·ΠΎΠ²Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
ΠΠ»Π°ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ, ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ ΡΠ½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° ΡΠ·ΡΠΊΠ΅ java (ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ°Π½Π½ΡΠΌ), ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π΅ΡΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½ fianl, ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ ΠΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ°ΡΡΠΈΡΡΡΡ JVM;
ΠΠ°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄
Π Java Π½Π΅ΠΏΡΠΎΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎΠ²Π½ΠΈ Π·Π°Π΄Π°Ρ Π² Java;
Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ;
ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Java ΠΈ ΡΡΠ΅Π΄ΠΎΠΉ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ Java
ΠΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΈΡΠΈΠ½Π° ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Java ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅;
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠ΅Π½Ρ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π½Π°ΡΡ Π΄Π΅ΡΠ°Π»ΠΈ Π²Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Java;
ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ
JVM ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°ΠΌ ΡΠ·ΡΠΊ Java ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ; JVM ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π±Π°Π·ΠΎΠ²ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ; ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Java ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ jre ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ; ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Java ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅ Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°, Π½Π°ΠΌ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ;
SunβJava
ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Sun ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° C; Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ jre ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π½Π° Java, ΠΊΠΎΡΠΎΡΡΠΉ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΠΌΠΈΡΠΎΠΌ ΡΠ΅ΡΠ΅Π· Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ; Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: ΠΌΠ΅ΡΠΎΠ΄ setPriority () java.lang.Thread ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° Java, Π½ΠΎ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠΎ class ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ setPriority0 (); ΡΡΠΎΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° C ΠΈ ΠΈΠΌΠΏΠ»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½ Π²Π½ΡΡΡΠΈ JVM;
ΠΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ Windows 95 ΡΡΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ Π²ΡΠ·ΠΎΠ²Π΅Ρ API Win32 SetPriority (). ΠΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°, Π½Π°ΠΏΡΡΠΌΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ JVM. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π²Π½Π΅ΡΠ½Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ JVM.
ΠΠ°ΠΊ JVM Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ
ΠΠΎΠ³Π΄Π° ΠΊΠ»Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΏΠ΅ΡΠ²ΡΠ΅, Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠΆΠ΅Π½ Π² ΠΏΠ°ΠΌΡΡΡ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·. ΠΠ°ΠΏΠΈΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠ°ΠΊΡΡ ββΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ: Π³Π΄Π΅ Ρ ΡΠ°Π½ΠΈΡΡΡ ΠΊΠΎΠ΄ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ, Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Π° (ΠΎΡΠΊΡΡΡΡΠΉ ΠΊΠ»Π°ΡΡ) ΠΈ Ρ. Π.
Π Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈΠ· ΡΡΡΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡΠ° Java: ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠ΅ ΡΡΠ΄Π° ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ (ΡΠ°ΡΡΡ 1)
Java ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΡΡΡ ΠΈ ΡΠ΄ΠΎΠ±Π½Ρ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ , Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° C ΠΈΠ»ΠΈ C++. ΠΠ½ΠΎΠ³Π΄Π° Ρ ΠΎΡΠ΅ΡΡΡ ΠΏΠΎΠ·Π²Π°ΡΡ ΠΏΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈΠ· ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ API, ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΡΠ»ΡΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Ρ β ΠΈ ΡΠΎΠ³Π΄Π° ΠΏΡΡΠΌΠΎΠΉ ΠΏΡΡΡ Π² Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄.
ΠΠΎ ΡΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ°ΠΌΠ½ΠΈ: Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈ Π²ΡΠ·Π²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈ Π»Π΅Π³ΠΊΠΎ, Π½ΠΎ JVM Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΊΡΠ°ΡΠΈΡΡΡΡ Π² ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΠΌΠ΅ΡΡΠ°Ρ , ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠ°Π΄Π°Π΅Ρ, ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Ρ ΡΠ°Π±ΠΎΡΠΎΠΉ, Π° Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΡΠ°ΡΡΡΠ²ΡΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ C-ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Ρ Π±ΡΠΊΠ²Π°ΠΌΠΈ JNI. Π§ΡΠΎ ΠΆΠ΅ ΠΌΠΎΠ³Π»ΠΎ ΠΏΠΎΠΉΡΠΈ Π½Π΅ ΡΠ°ΠΊ?
ΠΠ²Π°Π½ Π£Π³Π»ΡΠ½ΡΠΊΠΈΠΉ (dbg_nsk) ΠΈΠ· Huawei ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ: ΡΡΠΎ Π½Π΅ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Π² ΠΈΠ½ΡΠ΅ΡΠΎΠΏΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Java ΠΈ Π½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΡΠ°Π½ΡΡΠ΅ ΠΈ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ Π΄Π»Ρ ΠΈΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ (ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ). ΠΠ²Π°Π½ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΠΎΡΠ°Π΄ΠΎΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π²Π½Π΅Π·Π°ΠΏΠ½ΡΡ OOM ΠΈ ΡΠ°Π·ΠΌΡΡΠ»ΡΠ΅Ρ Π½Π° ΡΠ΅ΠΌΡ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ β Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Panama ΠΈ Sulong.
ΠΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π½Π°ΡΠΈΠ²Π°ΠΌΠΈ Π² Java. Π ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ:
ΠΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Π΅ΡΡΡ Π²Π°ΡΠΈΠ°Π½ΡΡ, ΡΡΠΎ ΠΈΠ· Π½ΠΈΡ Π±ΡΡΡΡΠ΅Π΅ ΠΈ Π»ΡΡΡΠ΅, ΠΈ Π΅ΡΡΡ Π»ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° β Π²ΡΡ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°ΠΌΠΈ.
ΠΠ°Π»Π΅Π΅ β ΠΏΠΎΠ²Π΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ Π»ΠΈΡΠ° ΡΠΏΠΈΠΊΠ΅ΡΠ°.
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΏΡΠΎ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠ΅ ΠΈΠ· Java Π² Π½Π΅Π³ΠΎ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ JVM-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ, 7.5 Π»Π΅Ρ ΡΠ°Π±ΠΎΡΠ°Π» Π² Excelsior, Π³Π΄Π΅ ΠΌΡ Π΄Π΅Π»Π°Π»ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ Excelsior JET, Π° Π²ΠΎΡ ΡΠΆΠ΅ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π³ΠΎΠ΄Π° ΡΠ°Π±ΠΎΡΠ°Ρ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Huawei, Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Excelsior@Huawei, Π³Π΄Π΅ ΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΡΠ²ΠΎΠΈΠΌ Π»ΡΠ±ΠΈΠΌΡΠΌ Π΄Π΅Π»ΠΎΠΌ: ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ, JVM ΠΈ Π½ΠΎΠ²ΡΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠ°ΡΡΡ Π²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ JVM, ΡΠΌΠΎΡΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΡΡΡΠΎΠ΅Π½ΠΎ, ΠΏΡΠ°Π²Π»Ρ β Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅, ΠΈ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ²ΡΠ·ΠΊΠΈ JVM Ρ Π½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ Ρ ΠΎΡΡ Π²Π°ΠΌ ΠΏΡΠΎ ΡΡΠΎ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ.
Π Java Π΅ΡΡΡ ΡΠ°ΠΊΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ ΡΠΈΡΠ° β Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π±Π΅Π· ΡΠ΅Π», Π·Π°ΡΠΎ ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ native:
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΡΠΎΠΈΡ ΠΈΡΠΊΠ°ΡΡ Π³Π΄Π΅-ΡΠΎ Π΅ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΠΎΠ΄Π³ΡΡΠΆΠ°Π΅ΠΌΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ . Π Π½Π°ΠΏΠΈΡΠ°Π½Π° ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π° ΠΊΠ°ΠΊΠΈΡ -ΡΠΎ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° C/C++ ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ C-like Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ.
ΠΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΡΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΡΠ°ΠΊ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅, ΡΡΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅. ΠΡΠ»ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ goNative, ΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΠ΅ ΠΈΠ· Java Π² C. Π Π²ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ goThere ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΈΠ· Java Π² C, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠ΄Π° Java-ΠΎΠ±ΡΠ΅ΠΊΡ callback ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΠΎΡ Π½Π΅Π³ΠΎ ΡΠΆΠ΅ Java-ΠΌΠ΅ΡΠΎΠ΄.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² call stack ΠΌΠΎΠ³ΡΡ ΡΠ΅ΡΠ΅Π΄ΠΎΠ²Π°ΡΡΡΡ java ΠΈ Π½Π°ΡΠΈΠ²Π½ΡΠ΅ ΡΡΠ΅ΠΉΠΌΡ.
ΠΠ°ΡΠ΅ΠΌ Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ Π½Π°ΡΠΈΠ²Ρ
Java β Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ managed-ΡΠ·ΡΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅Π³ΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΄ΠΎΠ±ΡΡΠ²Π°.
Π’Π°ΠΌ Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ, ΠΈ Π²Ρ, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, ΡΠΆΠ΅ ΠΎΡΠ²ΡΠΊΠ»ΠΈ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΡΠΈΠΏΠ° ΡΡΠ΅ΡΠ΅ΠΊ ΠΏΠ°ΠΌΡΡΠΈ, Π²ΠΈΡΡΡΠΈΡ ΡΡΡΠ»ΠΎΠΊ ΠΈ ΠΏΡΠΎΡΠ΅Π³ΠΎ β Π²ΡΡ ΡΡΠΎ ΠΎΡΡΠ°Π»ΠΎΡΡ Π³Π΄Π΅-ΡΠΎ Π² ΡΠ°ΠΉΠΎΠ½Π΅ C, Π° Π² Java Π΅ΡΡΡ GC, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΡΠΈΠΌ Ρ ΠΎΡΠΎΡΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ.
Π Π²ΠΎΠΎΠ±ΡΠ΅ Java β Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΡΠ·ΡΠΊ. ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠΉΠ΄Π΅ΡΠ΅ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΌΠ°ΡΡΠΈΠ²Π°, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΆΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π²Π°Π»Π°, ΠΊΠ°ΠΊ Π±ΡΠ»ΠΎ Π±Ρ Π² Π‘, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΊΡΠ°ΡΠΈΠ²ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ, ΠΈ Ρ ΡΡΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠ΅ΠΉ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ.
ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ Java β ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ Π¨ΠΈΡ ΠΈΠ· Π‘ΡΠ΅Π΄ΠΈΠ·Π΅ΠΌΡΡ: Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅, ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅, ΠΏΡΠΈΡΡΠ½ΠΎΠ΅ Π΄Π»Ρ ΠΆΠΈΠ·Π½ΠΈ ΠΌΠ΅ΡΡΠΎ, Π³Π΄Π΅ Π²ΡΠ΅ ΡΡΠ°ΡΠ°ΡΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Ρ Π²Π°Ρ Π²ΡΡ Π±ΡΠ»ΠΎ Ρ ΠΎΡΠΎΡΠΎ, ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π»ΠΎΠΌΠ°Π»ΠΎΡΡ.
ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π±ΡΠ΄Π΅ΡΠ΅ Π²ΡΡ ΠΎΠ΄ΠΈΡΡ Π·Π° Π΅Π³ΠΎ Π³ΡΠ°Π½ΠΈΡΡ, ΡΠΎ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π½ΠΈΡΠ΅Π³ΠΎ ΠΏΠ»ΠΎΡ ΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ.
Π Π²ΠΎΡ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ β ΡΡΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ»Π½Π°Ρ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡΡ. ΠΡΠΎ ΠΠΎΡΠ΄ΠΎΡ, Π³Π΄Π΅ ΡΠ°Π³ Π²Π»Π΅Π²ΠΎ-Π²ΠΏΡΠ°Π²ΠΎ, ΠΈ Π²Π°Ρ ΡΠΆΠΈΡΠ°Π΅Ρ Π³ΠΎΡΠ½ΡΠΉ ΡΡΠΎΠ»Π»Ρ.
ΠΠΎ Π·Π½Π°Π΅ΡΠ΅, ΠΈΠ½ΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡΡ ΠΈΠ· ΡΡΡΠ½ΠΎΠ³ΠΎ Π¨ΠΈΡΠ° ΠΈ ΠΈΠ΄ΡΠΈ Π² ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠ΅ ΠΊ Π ΠΎΠΊΠΎΠ²ΠΎΠΉ Π³ΠΎΡΠ΅.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Ρ ΠΎΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠΎ-ΡΠΎ Π½Π°ΠΏΡΡΠΌΡΡ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠΎΠΏΡΡΡΠΈΠΌ, Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΠΊΡΠΈ ΡΡΠΎΠΈΡ Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ β Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· Java Π²Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅, Π²Π°ΠΌ ΠΎΠΏΡΡΡ-ΡΠ°ΠΊΠΈ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΡΡΠΈΡΡΡΡ Π½Π° ΡΡΠΎΠ²Π΅Π½Ρ Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π΄ΡΡΠ½ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ· WinAPI Π² ΡΠ»ΡΡΠ°Π΅ Windows.
ΠΡΡΡ Π΅ΡΡ ΠΎΠ΄Π½Π° ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΡ. ΠΠ½ΠΎΠ³ΠΈΠ΅ Π»ΡΠ΄ΠΈ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ Π΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ Java ΡΠΎΡΠΌΠΎΠ·ΠΈΡ, Π° Π²ΠΎΡ C++ β ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ. ΠΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ Π²Π·ΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΌΡΠΉ performance critical ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° ΠΏΠ»ΡΡΡ, ΡΠ²ΡΠ·Π°ΡΡ Π²ΡΡ ΡΡΠΎ ΡΠ΅ΡΠ΅Π· Π½Π°ΡΠΈΠ²Ρ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠΎΡΠ΅ΠΌΡ ΡΡΠ° ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΎΠΌΠ½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ, Ρ ΠΏΠΎΠΊΠ°ΠΆΡ Π½ΠΈΠΆΠ΅, Π½ΠΎ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½Π° ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π² ΡΠ°ΠΌΠΎΠΌ JDK ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠ΅ΡΠ΅Π· Π½Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ. ΠΠΎΡΡΠΎΠΌΡ Π²Ρ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΡΠ΅ΡΡ Ρ ΡΡΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅Π½Ρ, ΡΠ°ΠΊ ΡΡΠΎ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
Π Π²ΠΎΡ Π²Ρ ΠΏΠΎΠ»Π½Ρ ΡΠ½ΡΡΠ·ΠΈΠ°Π·ΠΌΠ°, Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΡΠ²ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ Π½Π° Π‘, Π½Π°ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ Π½Π° Java, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅, ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅, ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ Π²ΡΡ ΡΡΠΊΠΎΡΠΈΡΡΡ, Π° Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅β¦ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ SIGSEGV, Exception_Access_Violation ΠΈΠ»ΠΈ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ SIGSEGV.
Π ΠΎΠ±ΡΠ΅ΠΌ, Π²Π°ΡΠ΅ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠ΅ ΠΈΠ· Π¨ΠΈΡΠ° Π² ΠΠΎΡΠ΄ΠΎΡ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ, ΠΊΠ°ΠΊ Ρ ΠΠΎΡΠΎΠΌΠΈΡΠ°. Π Π°Π·Π²Π°Π» ΡΡΡΠ°ΡΠ½ΡΠΉ, Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ, Π±ΡΠ΄ΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠ»ΠΎΠΌΠ°Π»Π°ΡΡ ΡΠ°ΠΌΠ° Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π°. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°ΠΆΠ΅ ΡΠ΅ΠΏΠΎΡΡΡΡ Π±Π°Π³ΠΈ, ΠΌΠΎΠ», JVM ΡΠ°Π·Π²Π°Π»ΠΈΠ»Π°ΡΡ.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π½Π°ΡΠΈΠ²Ρ.
Π ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅ Ρ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ ΠΎΡΡ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ Π»ΡΠ΄ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ SIGSEGV Ρ Π½Π°ΡΠΈΠ²Π°ΠΌΠΈ, Π²ΠΎ-Π²ΡΠΎΡΡΡ , ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΏΡΡΡ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΉΡΠΈ ΠΈΠ· Π¨ΠΈΡΠ° Π² ΠΠΎΡΠ΄ΠΎΡ, Π½Π΅ ΠΎΡΡΡΡΠ΅Π»ΠΈΡΡ ΡΠ΅Π±Π΅ Π½ΠΎΠ³Ρ, ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ SIGSEGV, ΡΡΠΎΠ±Ρ Π²ΡΡ Π±ΡΠ»ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΈ Ρ ΠΎΡΠΎΡΠΎ.
ΠΠΎ Ρ ΠΎΠ΄Ρ ΠΏΠΎΠ²Π΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠ²Π΅ΡΡΡΡΡΡ Π²ΠΎΡ Ρ ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΡΡΠΎΠΉ Β«ΠΠ°ΠΊ ΠΏΠΎΠ·Π²Π°ΡΡ Π½Π°ΡΠΈΠ²?Β»
ΠΡΠ»ΠΈ Π²Ρ ΠΈΠ΄Π΅ΡΠ΅ ΠΈΠ· Π¨ΠΈΡΠ° Π² ΠΠΎΡΠ΄ΠΎΡ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° ΡΡΠΈ Π²ΠΎΠΏΡΠΎΡΠ°:
ΠΡΠ²Π΅ΡΡ Π½Π° ΡΡΠΈ Π²ΠΎΠΏΡΠΎΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΡΡ Π½Π°ΠΌ ΡΠ°ΠΌΡΠ΅ Π±ΠΎΠ»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΡΠ° Π² ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΈ ΠΏΠΎΠΌΠΎΠ³ΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΡΡΠΎΡΠΈΡ Π΄ΠΎ Π½Π°ΡΠ΅ΠΉ ΡΡΡ
Π‘Π½Π°ΡΠ°Π»Π° ΡΡΡΡ-ΡΡΡΡ ΠΈΡΡΠΎΡΠΈΠΈ.
ΠΠ°ΡΠΈΠ²Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ Π² Java Π΅ΡΡ Π² ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅, Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ Π² JDK 1.0 ΡΠΆΠ΅ Π±ΡΠ» Native Method Invocation, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ» Π²ΡΠ·ΡΠ²Π°ΡΡ C-ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ. ΠΠΎ ΠΎΠ½ Π±ΡΠ» Π·Π°ΡΠΎΡΠ΅Π½ Π½Π° Π΄Π΅ΡΠ°Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Sun JVM. ΠΠ° ΡΠΎ, ΠΊΠ°ΠΊ ΡΠ°ΠΌ Π»Π΅ΠΆΠ°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° ΡΠ°ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ.
ΠΡΠ»ΠΈ ΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Microsoft ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π»Π° ΡΠ²ΠΎΠΉ Raw Native Interface. ΠΠ½ Π±ΡΠ» Π² ΡΠ΅ΠΌ-ΡΠΎ Π»ΡΡΡΠ΅, Π² ΡΠ΅ΠΌ-ΡΠΎ Ρ ΡΠΆΠ΅, Π½ΠΎ ΡΠΎΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π» ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄Π½ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ β ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΆΠ΅ Microsoft J++.
ΠΡΠ»ΠΈ ΠΏΠΎΠΏΡΡΠΊΠΈ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΠΉΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ Ρ Netscape, Π½ΠΎ Π² ΡΠ΅Π»ΠΎΠΌ ΡΡΠΎ Π±ΡΠ»ΠΈ ΡΡΠΌΠ½ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π°. ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΈΡΠ°Π»ΠΈ Π½Π°ΡΠΈΠ², Π²Ρ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° Π²ΡΠ΅Ρ JVM ΠΈΠ»ΠΈ Ρ ΠΎΡΡ Π±Ρ Π½Π° ΠΊΠ°ΠΊΠΈΡ -ΡΠΎ.
ΠΠ°ΡΠ° ΡΡΠ°: JNI β Java Native Interface
ΠΠ°ΡΠ° ΡΡΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡΠΎΠ³ΠΎ Java Native Interface ΠΈΠ»ΠΈ JNI. ΠΡΠΎ Π±ΡΠ» Π΅Π΄ΠΈΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠ°Π²ΠΈΡΡ Π²ΡΠ΅ΠΌΠΈ, ΠΈ ΠΎΠ½ Π±ΡΠ» ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π±ΡΠ» JVM Π½Π΅ΠΉΡΡΠ°Π»Π΅Π½.
ΠΠ½ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π·Π°ΡΠ°ΡΠΈΠ²Π°Π»ΡΡ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π°, Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠ°Ρ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠ° ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ Π² ΠΏΠ°ΠΌΡΡΠΈ, Π½Π΅Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠΉ GC.
ΠΡΠ»ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ JNI, Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ Π²Π°Ρ Π½Π°ΡΠΈΠ² ΡΠ°ΠΌ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠ°Π»Π΅Π΅ Ρ Π±ΡΠ΄Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΏΡΠΎ JNI ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ»ΠΎΡ ΠΎΠ³ΠΎ, Π½ΠΎ Ρ ΠΎΡΡ Π°ΠΊΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π½Π° ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠΎ Π±ΡΠ» ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ ΠΏΡΠΎΠ³ΡΠ΅ΡΡ Π΄Π»Ρ Π²ΡΠ΅ΠΉ ΠΎΡΡΠ°ΡΠ»ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ-ΡΠΎ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΈΡΠ°ΡΡ Π½Π°ΡΠΈΠ²Ρ Π±Π΅Π· ΡΡΡΠ°Ρ Π°, ΡΡΠΎ ΠΎΠ½ΠΈ Π³Π΄Π΅-Π½ΠΈΠ±ΡΠ΄Ρ Π½Π΅ Π·Π°Π²Π΅Π΄ΡΡΡΡ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
Π‘ΠΎ ΡΡΠΎΡΠΎΠ½Ρ Java Π²ΡΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠΈΠ»ΠΎ, Π²Ρ ΡΡΠΎ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ.
ΠΠΈΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ Π±Π΅Π· ΡΠ΅Π»Π°, ΠΏΠΈΡΠ΅ΠΌ Π³Π΄Π΅ ΠΈΡΠΊΠ°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² System.LoadLibrary Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΠΎΠ΄Π³ΡΡΠ·ΠΈΡΡ dll-ΠΊΡ, ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π² Π‘ ΠΈΠ»ΠΈ Π‘++.
Callback β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΊΠ»Π°ΡΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ call, Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ Β«Ok, we are in Shire again!Β», Π² ΠΌΠΎΡΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π²Π΅ΡΠ½ΡΠ»ΠΈΡΡ Π² Π¨ΠΈΡ Π½Π° ΠΎΡΠ»Π°Ρ .
ΠΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡ ΡΡΠ½ΠΊΡΠΈΠΉ?
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΡ ΡΠ°ΡΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘.
ΠΠ΄Π΅ΡΡ Π²ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΆΠ΅ Π½Π΅ ΡΠ°ΠΊ ΠΊΡΠ°ΡΠΈΠ²ΠΎ, Π½ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ JavaToNative.h ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΎ, ΡΡΠΎ ΡΠ°ΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ, Π½Π΅ ΠΎΡΠ΅Π½Ρ-ΡΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ.
ΠΠ΄Π΅ΡΡ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΡ ΡΠΈΠΏΠ° JNICall. ΠΠ΄Π΅ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠ΅ ΠΈΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Π°: ΠΎΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΅ΡΠ΅ ΠΈ package ΠΈ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°. Π ΡΠΈΠ³Π½Π°ΡΡΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ! Π£ Π½Π°Ρ Π±ΡΠ» 1 Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΈΠΏΠ° Callback, Π° Π·Π΄Π΅ΡΡ ΠΈΡ ΡΠΆΠ΅ ΡΡΠΈ ΠΈ ΠΎΠ½ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠ΅.
jclass ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π°ΡΠΈΠ² Π±ΡΠ» ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈ ΡΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Java-ΠΊΠ»Π°ΡΡ, ΡΠ΅ΠΉ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ. Callback ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ»ΡΡ Π² jobject ΠΈ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π½ΠΎΠ²ΡΠΉ JNIEnv ΡΠΎ Π·Π²ΡΠ·Π΄ΠΎΡΠΊΠΎΠΉ (ΠΏΡΠΎ Π½Π΅Π³ΠΎ ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅).
ΠΡΠ°Π²ΠΈΠ»Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΎΡΠ΅Π½Ρ ΡΠ΅ΡΠΊΠΈΠ΅ ΠΈ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² JNI-ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. ΠΡΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ ΡΠΈΠΏΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ C-ΡΠ½ΡΠ΅ (Π·Π°Π΄Π°Π½Π½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ ΠΈ Π±Π°Π·ΠΈΡΡΡΡΠΈΠ΅ΡΡ Π½Π° Π‘-ΡΠ½ΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ ΡΠΈΠΏΠ°Ρ ), Π²ΡΠ΅ ΡΠ΅ΡΠ΅ΡΠ΅Π½Ρ-ΡΠΈΠΏΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡΡΡ Π² jobject ΠΈΠ»ΠΈ Π² ΡΠ΅Π΄ΠΊΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡ Π² Π΅Π³ΠΎ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠ² β jclass, jstring, jthrowable, jarray.
ΠΡΠΎ ΠΎΡΠ²Π΅Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²ΠΎΠΏΡΠΎΡ Π² Π½Π°ΡΠ΅ΠΉ ΠΊΠ°ΡΡΠ΅ β ΠΊΠ°ΠΊ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΠ½Π° ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ, Π·Π½Π°Π΅Ρ Π²ΡΠ΅ ΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈ Π² ΠΏΠΎΠ΄Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΈΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π½Π°Π·ΡΠ²Π°ΡΡΠΈΠ΅ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ.
Π§ΡΠΎ Π·Π° JNIEnv?
ΠΡΠ³ΡΠΌΠ΅Π½Ρ JNIEnv * β ΡΡΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠ· 214 ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ JNINativeInterface.
ΠΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ :
Π Π²ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°ΠΆΠ½ΡΠ΅ ΠΈΠ· Π½ΠΈΡ , ΠΊΠΎΡΠΎΡΡΠ΅, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ.
JNINativeInterace ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π½Π°ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΌΠ΅ΡΠ°ΡΡΠΎΠ²Π½Π΅ β ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ Π±Ρ Π½Π° Java, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ΅ΡΠ°-ΡΡΡΠ½ΠΎΡΡΠΈ: handle Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ Π·Π΄Π΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ handle Java-ΠΊΠ»Π°ΡΡΠ°, ΡΠ΅ΡΠ΅Π· Π½Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΅Π³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ (Java ΠΎΠ±ΡΠ΅ΠΊΡΡ), Π²ΡΠ·ΡΠ²Π°ΡΡ Java ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ΅ΡΠ΅Π· ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Call*Method, Π²ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ, ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΠ΅ΡΡ ΡΡΠΈΠΌ Π½Π΅ Π² Java-ΠΊΠΎΠ΄Π΅, Π° Π² C.
ΠΡΠ΅ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ JNI-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° β Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Ρ ΠΎΡΡ ΠΊΠ°ΠΊ-ΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Java-ΠΌΠΈΡΠΎΠΌ: Π»ΠΈΠ±ΠΎ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ.
Π ΡΡΠΎ ΠΎΡΠ²Π΅Ρ Π½Π° Π²ΡΠΎΡΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ Π² Π½Π°ΡΠ΅ΠΉ ΠΊΠ°ΡΡΠ΅: ΠΊΠ°ΠΊ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ JVM. ΠΠΎΡ ΡΠ°ΠΊ β ΡΠ΅ΡΠ΅Π· 214 ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π²ΡΠ°ΡΠ°ΠΌΠΈ Π² Π¨ΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π½Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅Π»ΠΎ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ jclass, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡΡ ΠΌΠΎΠ΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, Π½Π°Ρ ΠΎΠΆΡ Π² Π½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ call, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ void, ΠΈ Π²ΡΠ·ΡΠ²Π°Ρ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JNI-ΡΡΠ½ΠΊΡΠΈΠΈ CallVoidMethod. ΠΠΎΠ»ΠΆΠ½Π° Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΡΡ ΡΡΡΠΎΠΊΠ°, ΡΡΠΎ ΠΌΡ Π²Π΅ΡΠ½ΡΠ»ΠΈΡΡ Π½Π° ΠΎΡΠ»Π°Ρ ΠΈ Π²ΡΡ ΠΎΠΊ.
ΠΠ°ΠΊ Π²ΡΠ΅ ΡΡΠΎ ΡΠΎΠ±ΡΠ°ΡΡ?
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Π²ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ ΡΠ°Π½Π΅Π΅ ΡΠΎΠ±ΡΠ°ΡΡ.
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Windows, ΠΏΠΎΡΡΠΎΠΌΡ Π³ΡΠ³Π»Ρ Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ±ΡΠ°ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π΄Π»Ρ JNI Π½Π° ΡΡΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅:
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Ρ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° NativeLib.dll.
ΠΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΠΈ. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π΄Π»Ρ Linux ΠΈΠ»ΠΈ macOS β Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΡ Π±ΡΠ΄ΡΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ.
Π ΡΡΠ°ΡΡΡΡ, Π΅ΡΡΡ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΡ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΠ³ΠΎ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Nokee plugins. ΠΡΠΎ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°ΡΠ³Π΅Ρ Π² gradle ΡΠΊΡΠΈΠΏΡ ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠΎΠ±ΡΠ°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΏΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠ΅ Π²Π°Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ.
ΠΠΊΠ΅ΠΉ, ΡΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΌΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΡΠΎΠ±ΡΠ°Π»ΠΈ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π½Π°ΡΠ΅ Java ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌβ¦
Π£ΡΠ°, ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΎΠ²Π΅ΡΡΠΈΠ»ΠΈ ΡΠ²ΠΎΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠ΅ Π² ΠΠΎΡΠ΄ΠΎΡ ΠΈ Π²Π΅ΡΠ½ΡΠ»ΠΈΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ, ΡΡΠΎ ΠΆΠ΅ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΉΡΠΈ Π½Π΅ ΡΠ°ΠΊ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΠΎΠΏΠΈΡΠ°ΡΡ Π½Π° Π½Π΅ ΡΠ°ΠΌΠΎΠΌ ΠΏΡΠΈΡΡΠ½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ C, Π΄Π° ΠΈ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΡΠΎ Π²ΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΆΠ°ΡΠ½ΠΎ.
Π§ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΉΡΠΈ Π½Π΅ ΡΠ°ΠΊ?
Π ΠΏΠΎΠΉΡΠΈ Π½Π΅ ΡΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π΅ΡΠ΅ΠΉβ¦
Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΠ΅ Π² Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄, Π²Ρ ΡΠ΅ΡΡΠ΅ΡΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠΈΠΏΠΎΠ²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
ΠΠ°, Π²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ callback, Π½ΠΎ ΠΎΠ½ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ»ΡΡ Π² jobject, ΠΈ ΠΊΠ°ΠΊΠΎΠΉ Π±ΡΠ» ΡΠΈΠΏ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ β ΡΡ ΠΎΠ΄Ρ Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ.
ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ» Π±Ρ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΆΠ΅ java.lang.Object. Π ΠΎΠ½ Π±Ρ ΡΠΎΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ»ΡΡ Π² Π½Π°ΡΠΈΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΊΠ°ΠΊ jobject, Π° ΠΏΠΎΡΠΎΠΌ Ρ ΠΌΠΎΠ³Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΠΎ Π½Π΅Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ·Π²Π°ΡΡ CallVoidMethod, ΠΏΠ΅ΡΠ΅Π΄Π°Π² ΡΡΠ΄Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π½Π΅ Callback, Π° ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ java.lang.Object ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΏΠΎΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ call (ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ°ΠΌ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π½Π΅Ρ).
ΠΠ΅Π½Ρ Π½Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, Π½Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡ runtime ΡΠΎΠ²Π½ΠΎ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ»ΡΡΠΈΡΡΡ ΡΠ°Π·Π²Π°Π» ΠΈΠ·-Π·Π° ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΏΠΎΠ·Π²Π°ΡΡ call ΠΎΡ java.lang.Object.
ΠΠ±ΡΠΎΠ»ΡΡΠ½ΠΎ ΠΏΠΎΡ ΠΎΠΆΠ°Ρ ΠΈΡΡΠΎΡΠΈΡ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ JNI-ΡΡΠ½ΠΊΡΠΈΡ Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅. ΠΠΈΠΊΡΠΎ Π½Π΅ ΠΏΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π‘allVoidMethod, Π° Π½Π΅ CallBooleanMethod ΠΈΠ»ΠΈ CallStaticVoidMethod ΠΈΠ»ΠΈ Π΅ΡΡ ΡΡΠΎ-ΡΠΎ β ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²Π°ΡΠ° ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΎΡΠΈΠ±Π»ΠΈΡΡ, ΡΠΎ ΡΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (ΠΏΡΡΠΌ ΠΊΠ°ΠΊ Π² ΠΏΠ»ΠΎΡ ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Π½Π° Π‘), ΡΡΠΎ Π½Π°ΡΠ½Π΅Ρ Π΄Π΅Π»Π°ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° β Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ.
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΊΠΎΠ³Π΄Π° Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ ΠΈΠ· Π½Π°ΡΠΈΠ²Π° Java-ΠΌΠ΅ΡΠΎΠ΄, ΠΎΠ½ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠΎΡΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² Π½Π°ΡΠΈΠ². Π Java ΠΌΡ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ, ΡΡΠΎ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ»Π΅ΡΠ°Π΅Ρ Π΄Π°Π»ΡΡΠ΅, Π½ΠΈΡΠ΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅Π»Π°ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ. ΠΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΡΠ½ΠΎΠ²Π° Π²Π°ΡΠ° ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ! ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π° Π½Π΅ ΡΠ»ΡΡΠΈΠ»ΠΎΡΡ Π»ΠΈ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Java-ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ExceptionCheck ΠΈΠ»ΠΈ ExceptionOccurred), ΠΈ Π΅ΡΠ»ΠΈ ΡΠ°ΠΊ, ΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΅Π³ΠΎ Π·Π΄Π΅ΡΡ (Ρ ΠΏΠΎΠΌΠΎΡΡΡ ExceptionDescribe ΠΈ ExceptionClear). ΠΡΠ»ΠΈ ΠΆΠ΅ Π²Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅, ΡΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ΄Π΅Ρ Π² Java-ΠΊΠΎΠ΄, ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΡΠΈΡ ΡΠΆΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ³ΠΎ Π΄Π»Ρ Π²Π°Ρ ΠΌΠ΅ΡΡΠ°, ΠΈ Π²Ρ ΡΠ½ΠΎΠ²Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
ΠΠΌΠ΅ΡΡΠΎ ΡΡΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΡΠΆΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π²Π°Π»Π° Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ stacktrace, Π³Π΄Π΅ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ, ΡΡΠΎ Π²Ρ ΠΏΠ΅ΡΠ΅ΠΏΡΡΠ°Π»ΠΈ MethodID ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π½Π΅ ΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ (ΡΡΠΎ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, Ρ Π½Π°Ρ ΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ!).
ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π±ΡΡΡΡΠΎ ΠΏΠΎΠ½ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² Π±ΠΎΠ»ΡΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ Ρ Π½Π°ΡΠΈΠ²Π°ΠΌΠΈ.
ΠΡΠΎ Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π±ΡΠ΄ΡΡ Π²ΡΠ»Π΅ΡΠ΅Π½Ρ Π²ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½ΠΎ Π²ΡΠ΅ ΡΠ°ΠΌΡΠ΅ ΠΏΡΠΎΡΡΡΠ΅ β Π΄Π°.
Garbage Collector ΠΈ Native-ΠΊΠΎΠ΄
Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΡΠ½ΠΊΡ Π² Π½Π°ΡΠ΅ΠΉ ΠΊΠ°ΡΡΠ΅ β ΠΊΠ°ΠΊ GC Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Π½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
ΠΠΎΡΠ΅ΠΌΡ ΠΏΡΠΎ ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π½ΡΠΆΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡΡ? ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² Java ΠΊΠΎΠ΄Π΅, ΠΊΠΎΠ³Π΄Π° JVM Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΌΡΡΠΎΡ, ΠΎΠ½Π° ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Java ΠΏΠΎΡΠΎΠΊΠΈ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΡΠΎΡΠΊΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ GC safepoints. ΠΠ°Π²Π°ΠΉΡΠ΅ Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠ»ΡΡΠ°ΠΉ StopTheWorld-ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΎΡΠΎΠ². Π ΡΠ°ΠΊΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΡΠ΅ Java-ΠΏΠΎΡΠΎΠΊΠΈ Π΄ΠΎΡΡΠΈΠ³Π»ΠΈ Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΡ safepoints ΠΈ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ, Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ GC-ΡΡΠ΅Π΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΌΡΡΠΎΡ.
ΠΡΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ GC ΠΌΠΎΠΆΠ΅Ρ Π΄Π²ΠΈΠ³Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ. ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠΈΠ·Π°ΡΠΈΠΈ ΠΊΡΡΠ΅ΠΉ, Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ ΠΊΠ°ΠΊΠΈΡ -ΡΠΎ ΡΠ΅Π»Π΅ΠΉ β Π½Π΅Π²Π°ΠΆΠ½ΠΎ. ΠΡΠ»ΠΈ Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΡΠΎ-ΡΠΎ ΠΈΠ· Java-ΡΡΠ΅Π΄ΠΎΠ² Π±ΡΠ΄Π΅Ρ ΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Java Ρ ΠΈΠΏΠΎΠΌ β ΡΠΈΡΠ°ΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΏΠΎΠ»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Java ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΡΠΈΡΡΡ Π½Π΅ΠΏΡΠΈΡΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ: ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠΎΡΡΠΎ ΡΠΊΡΠ°Π΄ΡΡ Ρ Π½Π΅Π³ΠΎ ΠΈΠ·-ΠΏΠΎΠ΄ Π½ΠΎΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΡ Π² Π΄ΡΡΠ³ΡΡ ΡΠ°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π·Π²Π°Π»).
Π’Π°ΠΊ Π²ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ safepoints Π² ΡΠΎΠΌ, ΡΡΠΎ Π² Π½Π°ΡΠΈΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΡΠ°ΠΊΠΎΠΉ ΡΠΎΠΊΡΡ Π½Π΅ ΠΏΡΠΎΠΉΠ΄Π΅Ρ.
Safepoints Π²ΡΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΈΠ· JVM, Π° Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠΎΠ΄, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° C ΠΈΠ»ΠΈ C++, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ clang-ΠΎΠΌ, ΡΠΎ ΡΠ°ΠΌ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ safepoint! Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅, ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½Π°ΡΠΈ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π°ΡΠΈΠ², ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΌΡΡΠΎΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Ρ ΡΠΌΠΈΡΠΈΡΡΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π½Π°ΡΠΈΠ²Ρ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ ΡΠΎ ΡΠ±ΠΎΡΠΊΠΎΠΉ ΠΌΡΡΠΎΡΠ°.
Π ΡΠΎΠ³Π΄Π° ΡΡ Π΅ΠΌΠ° ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ°ΠΊ: ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠ΅ Π»ΠΈΡΠ°, ΡΡΠ΅Π΄Ρ, ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄. ΠΠΎΠΏΡΡΡΠΈΠΌ, ΠΎΠ½ΠΈ ΡΡΠ»ΠΈ Π² Π½Π°ΡΠΈΠ² Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ ΠΏΠΎΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΌΡΡΠΎΡ, ΠΈ Π²ΠΎΡ ΠΎΠ½ΠΈ ΡΠΏΠΎΠΊΠΎΠΉΠ½ΠΎ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Ρ GC-ΡΡΠ΅Π΄Π°ΠΌΠΈ.
ΠΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΠ° Π²Ρ ΠΎΠ΄Π΅ Π² Π½Π°ΡΠΈΠ² Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ±ΠΎΡΡΠΈΠΊΡ ΠΌΡΡΠΎΡΠ°: ΠΌΡ ΡΡΠ»ΠΈ Π² Π½Π°ΡΠΈΠ², Π½Π΅ ΠΆΠ΄ΠΈ Π½Π°Ρ, ΡΠΏΠΎΠΊΠΎΠΉΠ½ΠΎ ΡΠΎΠ±ΠΈΡΠ°ΠΉ ΠΌΡΡΠΎΡ. ΠΠ° Π²ΡΡ ΠΎΠ΄Π΅ Π½Π°Π΄ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π° Π½Π΅ ΠΈΠ΄Π΅Ρ Π»ΠΈ ΡΠ΅ΠΉΡΠ°Ρ ΡΠ±ΠΎΡΠΊΠ° ΠΌΡΡΠΎΡΠ°, ΠΈ Π΅ΡΠ»ΠΈ ΠΈΠ΄ΡΡ β ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ.
ΠΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π²ΡΡ Π΅ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: Π΄Π°ΠΆΠ΅ Π² Π½Π°ΡΠΈΠ²Π΅ Π²Ρ Π½Π΅ ΠΈΠΌΠ΅Π΅ΡΠ΅ ΠΏΡΠ°Π²Π° ΡΡΠΎΠ³Π°ΡΡ Java-ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΠΉΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π²Π·ΡΡΡ ΠΈ Π΄Π²ΠΈΠ³Π°ΡΡ GC.
ΠΠ°ΠΊ Π²Ρ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, Π²ΡΠ΅ Π½Π°ΡΠΈ Java-ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² Π½Π°ΡΠΈΠ²Π°Ρ ΠΏΠΎΡΠ΅ΠΌΡ-ΡΠΎ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ»ΠΈΡΡ Π² jobject.
ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ jobject β Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Π΄Π»Ρ Java-ΡΡΡΠ»ΠΎΠΊ, Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ Ρ Π΅Π½Π΄Π»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π½ΡΡΡΠΈ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΡΡ Π°Π΄ΡΠ΅Ρ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΠΉ Java-ΠΎΠ±ΡΠ΅ΠΊΡ.
ΠΠ°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ Java-ΠΌΠ°ΡΠΈΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ²ΡΠ·Ρ ΡΡΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠΌ Π°Π΄ΡΠ΅ΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π’ΠΎ Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΠ΄Π²ΠΈΠ½ΡΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ jobject ΡΠΎΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΏΠ°ΡΡΠ΅Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Java-ΠΌΠΈΡΠΎΠΌ ΠΈΠ· Π½Π°ΡΠΈΠ²Π° β ΡΡΠΎ JNI-ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ jobject. ΠΠΎΡΡΠΈ Π²ΠΎ Π²ΡΠ΅Ρ ΠΈΠ· Π½ΠΈΡ ΡΡΠΎΠΈΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Ρ GC, ΡΠ°ΠΊ ΡΡΠΎ Π²Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π½ΠΈΡΠ΅Π³ΠΎ ΠΏΠ»ΠΎΡ ΠΎΠ³ΠΎ, ΠΏΠΎΠΊΠ° ΠΈΠ΄Π΅Ρ ΡΠ±ΠΎΡΠΊΠ° ΠΌΡΡΠΎΡΠ°.
ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π±ΡΠ»Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΈΡ Π² Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄, ΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ Π·Π° Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π½Π°ΡΠΈΠ²Π° ΠΈΡ Π½ΠΈΠΊΡΠΎ Π½Π΅ ΡΠΎΠ±Π΅ΡΠ΅Ρ. ΠΡΠΈ jobject ΡΠ²Π»ΡΡΡΡΡ ΡΠ²ΠΎΠ΅ΠΎΠ±ΡΠ°Π·Π½ΡΠΌΠΈ GC-root, ΡΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π²ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ.
JNI References
ΠΠ΅ΡΠ²Π°Ρ ΠΈ Π³Π»Π°Π²Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π»Ρ Ρ Π΅Π½Π΄Π»ΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΡΡ. ΠΡΠΎ Π½Π΅ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½ΠΈ Π½Π° Java, Π½ΠΈ Π½Π° C, ΡΠΊΠΎΡΠ΅Π΅, ΡΡΠΎ-ΡΠΎ ΡΡΠ΅Π΄Π½Π΅Π΅ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ. ΠΡΡ, ΡΡΠΎ Π²Ρ Π² ΠΊΠΎΠ΄Π΅ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΊΠ°ΠΊ jobject, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ JNI Reference, ΠΏΡΠΈΡΠ΅ΠΌ ΠΎΠ½ΠΈ Π±ΡΠ²Π°ΡΡ ΡΡΠ΅Ρ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ².
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , local references.
ΠΠ½ΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΊ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π½Π΅ Π΄ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½ local reference (ΠΏΠΎΠ»Π½Π°Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ).
ΠΠ½ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Ρ, Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΡΠ΅ΠΌ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ JNI-reference β ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ LR. ΠΠ΅ΡΠ΅Π΄Π°Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Java-Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² Π½Π°ΡΠΈΠ² β ΠΎΠ½ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ Π² Π»ΠΎΠΊΠ°Π»ΡΠ΅ΡΡ, Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ JNI-ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ β ΠΈΠ· Π½Π΅Π΅ ΡΠΎΠΆΠ΅ Π²Π΅ΡΠ½Π΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ΅Ρ. Π Π²ΠΎ-Π²ΡΠΎΡΡΡ , Ρ ΡΡΠΈΠΌΠΈ ΡΡΡΠΊΠ°ΠΌΠΈ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π°, ΠΊΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, ΠΎΡΠ΅Π½Ρ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΠΈ ΠΏΡΠΎΡΡΡΡ ΡΡ Π΅ΠΌΡ ΠΎΡΠΈΡΡΠΊΠΈ, ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ΅ΡΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡ ΡΡΠΎ Π½Π° Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
ΠΠ΄Π΅ΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π°Π»Π»ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΎΠ³ΡΠΎΠΌΠ½ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΡΡΠΌΠΎ ΠΈΠ· Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ BornInNative Ρ ΠΏΠΎΠΌΠΎΡΡΡ JNI-ΡΡΠ½ΠΊΡΠΈΠΈ FindClass, Π° ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΈ ΠΌΠ΅ΡΠΎΠ΄-ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΏΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌΡ ΠΈΠ½ΡΡΠ°Π½ΡΡ, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ»ΠΈ Π½Π΅Ρ. Π ΠΏΠΎΡΠΎΠΌ ΠΏΡΠΎΡΡΠΎ Π² Π½Π°ΡΠΈΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JNI-ΡΡΠ½ΠΊΡΠΈΠΈ NewObject Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ.
NewObject Π°Π»Π»ΠΎΡΠΈΡΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΡ, Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π² Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΡ ΡΠ°ΠΌΡΡ local reference, ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΡΠ΅ΠΌ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ obj ΡΠΈΠΏΠ° jobject. ΠΡ Π½Π΅Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ Π΄Π°Π»ΡΡΠ΅ Π°Π»Π»ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ»ΠΈ Π½Π΅Ρ.
ΠΠΎΡ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π½Π° Java, Ρ Π²Π°Ρ Π±Ρ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΡΠΎΠΌΠ½Π΅Π½ΠΈΠΉ Π² ΡΠΎΠΌ, ΡΡΠΎ Π·Π΄Π΅ΡΡ Π²ΡΡ Ρ ΠΎΡΠΎΡΠΎ Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΡΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½Π°Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΡ ΡΠΈΠΊΠ»Π°, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π½Π° ΡΡΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΆΠ΅ Π½ΠΈΠΊΠΎΠΌΡ Π½Π΅ Π½ΡΠΆΠ΅Π½, Π° Π·Π½Π°ΡΠΈΡ, GC ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΡΠΈΠ΄ΡΡ ΠΈ ΡΠΎΠ±Π΅ΡΠ΅Ρ Π΅Π³ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΠ°ΠΌΡΡΠΈ Π±ΡΠ΄Π΅Ρ Π½Π΅ Ρ Π²Π°ΡΠ°ΡΡ Π΄Π»Ρ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΠΈ.
ΠΠ° Java Π±Ρ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, Π½ΠΎ Π² Π½Π°ΡΠΈΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π²Π°ΠΌ ΡΠ°ΠΊΠΎΠ³ΠΎ Π½ΠΈΠΊΡΠΎ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ. ΠΡΠΎ Local reference Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠΌΠΈΡΠ°ΡΡ Π½Π΅ ΠΏΠΎΠ·ΠΆΠ΅, ΡΠ΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠΎ ΡΡΠΎ ΠΈ Π²ΡΠ΅: ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Ρ ΠΏΠ΅ΡΠ΅Π½Π°Π·Π½Π°ΡΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π° Π΄ΡΡΠ³ΡΡ LR, ΠΎΠ½ΠΈ ΡΠΌΠΈΡΠ°ΡΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°Π½Ρ ΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ.
Π§Π΅ΡΠ΅Π· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΡΠ΅Π½ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ ΠΌΡ Π·Π°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΠΈ ΡΡΠ°Π»ΠΈ ΡΠ΅ΠΉΠ»ΠΈΡΡΡΡ. JVM ΡΠ΅ΠΉΡΠ°Ρ Π² ΠΊΠΎΠΌΠ°ΡΠΎΠ·Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, ΠΎΠ½Π° ΠΏΡΡΠ°Π΅ΡΡΡ Π²ΡΠΊΠΈΠ½ΡΡΡ out of memory, Π½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, Π²Π΅Π΄Ρ Π² Π½Π°ΡΠΈΠ²Π΅ ΠΌΡ ΡΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡ Π·Π°ΠΊΠ°Π·ΡΠ²Π°Π»ΠΈ 1 ΠΠ, Π½ΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠΆΠ΅ 2 ΠΠ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π°) Π²ΡΠ΅ Java-ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π² heap, Π±) ΡΠ°ΠΌΠΈ Π½Π΅ΡΠΌΠΈΡΠ°ΡΡΠΈΠ΅ jobject ΡΠΎΠΆΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡΡ (Π½Π°ΡΠΈΠ²Π½ΡΡ) ΠΏΠ°ΠΌΡΡΡ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π²Π°ΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠ΅Π²ΡΡΠΈΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π»ΠΈΠΌΠΈΡ Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ.
Π§ΡΠΎΠ±Ρ ΡΡΠΎ ΠΏΠΎΡΠΈΠ½ΠΈΡΡ, Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ DeleteLocalRef, ΠΊΠΎΡΠΎΡΠ°Ρ Π³ΠΎΠ²ΠΎΡΠΈΡ JVM, ΡΡΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΡΡΡΠ»ΠΊΠ° Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½Π°, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ½ΠΈΡΡΠΎΠΆΠΈΡΡ, Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ±ΡΠ°ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ GC.
ΠΡΠΏΡΠ°Π²Π»Π΅Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π»ΡΠ±ΡΠΌ ΡΠ°Π·ΡΠΌΠ½ΡΠΌ Xmx.
Π’Π°ΠΊ ΡΡΠΎ Ρ local Reference Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ memory leak, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈ Π²ΠΈΡΡΡΡΡ ΡΡΡΠ»ΠΊΡ. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ LR Π² static-ΠΏΠΎΠ»Π΅, Π²ΡΠΉΡΠΈ ΠΈΠ· Π½Π°ΡΠΈΠ²Π°, Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΈ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΡΠΎ ΠΏΠΎΠ»Π΅. ΠΠΎΠ»ΡΡΠΈΡΠ΅ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΡΠΎΠΌΠ΅ LR Π΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Ρ Π΅Π½Π΄Π»Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Global Reference. Π’Π°ΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π²Ρ ΡΠ²Π½ΠΎ ΠΈΡ Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΠ΅. ΠΠ΄Π΅ΡΡ Π΅ΡΡ Π»Π΅Π³ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ΅ΡΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ (Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π·Π°Π±ΡΡΡ Π²ΡΠ·Π²Π°ΡΡ DeleteGlobalRef), Π½ΠΎ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΠΎΠ½ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΡΠΌΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½Ρ, Π½Π΅Ρ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΡΡΠ΅ΠΉ. ΠΠ°Π±ΡΠ»ΠΈ ΠΏΠΎΠ·Π²Π°ΡΡ DeleteGlobalRef β Π·Π½Π°ΡΠΈΡ, Π±ΡΠ΄Π΅Ρ ΡΡΠ΅ΡΠΊΠ°.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ Π΅ΡΡΡ Weak Global Reference, ΡΡΠΎ GR, Π½ΠΎ Π² Π½ΠΈΡ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ GC Π½Π΅ ΡΠΎΠ±Π΅ΡΠ΅Ρ Π²Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠΎ ΠΏΠΎΠ»Π½Π°Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ ΡΠΎ ΡΠ»Π°Π±ΡΠΌΠΈ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ ΠΈΠ· Java. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π½ΠΈΠΌΠΈ Π°ΠΊΡΡΠ°Π»ΡΠ½Ρ ΠΈ Π΄Π»Ρ Π½Π°ΡΠΈΠ²ΠΎΠ² ΡΠΎΠΆΠ΅.
ΠΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Ρ GC
ΠΡΠΎΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ JNI Reference ΡΡΠΎΠΈΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ, ΡΡΠΎ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ JNI-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΡΠΎ ΡΠ±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΌΡΡΠΎΡΠ°. ΠΠΎΠΏΡΡΡΠΈΠΌ, Π²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ Π² Π½Π°ΡΠΈΠ² ΠΌΠ°ΡΡΠΈΠ², ΠΎΠ½ Π·Π°Π²Π΅ΡΠ½Π΅ΡΡΡ Π² jobject, Π½ΠΎ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ΅ΡΠ΅Π· jni-ΡΡΠ½ΠΊΡΠΈΠΈ β ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π΄ΠΎΠ»Π³ΠΎ.
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²Ρ Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° Π·Π°Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅Π³ΠΈΠΎΠ½Ρ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° Π·Π° ΡΠ°Π·. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, GetIntArrayElements. ΠΠ΄Π½Π°ΠΊΠΎ Ρ Π½Π°Ρ ΠΎΠΏΡΡΡ Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π΅ΡΠ»ΠΈ Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄Π²ΠΈΠ½ΡΡΡ GC. Π‘ ΡΡΠΈΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΠΎ-ΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΡΡΡ Π΄Π²Π΅ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΌΠΎΠΆΠ½ΠΎ Β«Π·Π°ΠΏΠΈΠ½ΠΈΡΡΒ» ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΊΠ°Π·Π°ΡΡ ΡΠ±ΠΎΡΡΠΈΠΊΡ ΠΌΡΡΠΎΡΠ° Β«Π΄Π°Π²Π°ΠΉ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π²ΠΈΠ³Π°ΡΡ ΠΏΠΎΠΊΠ° ΠΌΠ°ΡΡΠΈΠ², ΡΡ ΡΠΎΠ±ΠΈΡΠ°ΠΉ ΠΌΡΡΠΎΡ, Π° Π΅Π³ΠΎ Π½Π΅ Π΄Π²ΠΈΠ³Π°ΠΉΒ».
ΠΡΠΎΡΠ°Ρ ΡΠ°ΠΊΡΠΈΠΊΠ° β ΠΏΡΠΎΡΡΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² Π½Π°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ, Π² Π½Π°ΡΠΈΠ²Π΅ ΠΏΠΎΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ ΠΊΠΎΠΏΠΈΠ΅ΠΉ, Π° ΠΏΠΎΡΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ².
JNI ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΠΏΠ° GetIntArrayElements Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ°ΠΊΡΡ Π΄Π²ΠΎΠΉΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ: Ρ Π½ΠΈΡ Π΅ΡΡΡ ΡΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π°ΠΆΠΎΠΊ. ΠΡΠ»ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΡΠ΅ΡΠΈΠ»Π°ΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ, ΡΠΎ ΡΡΠ΄Π° Π·Π°ΠΏΠΈΡΠ΅ΡΡΡ true, Π΅ΡΠ»ΠΈ Π½Π΅Ρ, ΡΠΎ false, ΡΠ°ΠΊ ΡΡΠΎ Π²Ρ ΡΠ·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ.
ΠΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠΉ ΠΊΠ°ΠΌΠ΅Π½Ρ Π·Π΄Π΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ ΠΈ ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΌΡΡΠΎΡΠ° Π½Π΅ ΡΠΌΠ΅ΡΡ pin-Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ. ΠΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΊΠ°ΠΊ Π±Ρ Π²Ρ Π½Π΅ Π½Π°Π΄Π΅ΡΠ»ΠΈΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ ΡΠ»ΡΡΠΈΠ»ΠΎΡΡ, ΠΎΠ½ΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ. Π’Π°ΠΊ ΡΡΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π² Π½Π°ΡΠΈΠ²Π΅ Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ Π½Π° 2 ΠΠ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½Π΅ΡΠ΅ΡΡ Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ Π² Π½Π°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ, ΡΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π°ΡΠΈΡΡ ΠΈ ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΈ ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΌΡ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ Π²Π°ΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΅ΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΡΠ΅ JNI-ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΠΏΠ° GetArrayElementsCritical (ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΡΡΡΡΠΈΠΊΡΠΎΠΌ Critical), ΠΎΠ½ΠΈ Π²ΡΡΡΠ΅ΡΠΊΠΈ ΡΡΠ°ΡΠ°ΡΡΡΡ Π½Π΅ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ².
ΠΠΈΠ½Π½ΠΈΠ½Π³Π° Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ GC Π½Π΅Ρ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π²ΡΡ ΠΎΠ΄ΡΡ ΠΈΠ· ΡΠΈΡΡΠ°ΡΠΈΠΈ?
ΠΠ½ΠΈ Π³ΠΎΠ²ΠΎΡΡΡ: Β«ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π° Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΌΡΡΠΎΡΠ°, ΠΏΡΡΡΡ GC ΠΏΠΎΠ΄ΠΎΠΆΠ΄ΡΡΒ». ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ Π΄Π°ΡΡ Ρ ΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π²Ρ ΠΏΠΎΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Π±Π΅Π· ΠΊΠΎΠΏΠΈΠΉ, Π½ΠΎ Π΅ΡΡΡ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΡΠΎΡΠΎΠ½Π° ΠΌΠ΅Π΄Π°Π»ΠΈ.
ΠΡ ΠΎΡΠΎΠ΄Π²ΠΈΠ³Π°Π΅ΡΠ΅ GC Π½Π° Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΡΠΎΠΊ, ΡΡΠΎ ΡΠΆΠ΅ ΠΏΠ»ΠΎΡ ΠΎ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅, Π½ΠΎ ΠΏΡΠΈ ΡΠ°ΠΌΠΎΠΌ ΠΏΠ»ΠΎΡ ΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π΅Π΄Π»ΠΎΠΊ ΠΈ Π·Π°Π²ΠΈΡΠ°Π½ΠΈΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΏΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π² ΠΏΠΎΡΡΠ΅ ΠΠ»Π΅ΠΊΡΠ΅Ρ Π¨ΠΈΠΏΠΈΠ»ΡΠ²Π°.
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π°ΡΠΈΠ²Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
Π Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π½Π΅Π»ΡΠ·Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΏΡΠΎ Π½Π°ΡΠΈΠ²Ρ ΠΈ Π½Π΅ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. Π Π°Π· Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ C-ΠΊΠΎΠ΄, ΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ΅ΡΡΠΎΠ²ΡΠΊΠΈ Π±ΡΡΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΎΠ±ΡΡΠ½ΠΎΠΉ Java. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ β ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ Π·Π°Π±Π»ΡΠΆΠ΄Π΅Π½ΠΈΠ΅. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°ΠΌ Π²ΡΠ·ΠΎΠ² Π½Π°ΡΠΈΠ²Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² β ΡΡΠΎ ΡΠ΅ΡΡΠ΅Π·Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π»Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΡΡΡ!
ΠΡΠ΅ Π·Π°ΠΌΠ΅ΡΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ Π½Π° ΠΌΠ°ΡΠΈΠ½Π΅: Intel Core i7-7700 @ 3.60 GHz;16GB RAM, Linux Ubuntu 18.04
ΠΠ°ΡΠ½Π΅ΠΌ Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°. ΠΡ ΠΈΠ· Java Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π΄ΡΡΠ³ΠΎΠΉ Java ΠΌΠ΅ΡΠΎΠ΄ Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π±Π΅Π· ΠΈΠ½Π»Π°ΠΉΠ½Π°. ΠΠ΅ΡΠΈΠΌ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JMH, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ 696 ΠΏΠΎΠΏΡΠ³Π°Π΅Π², (Π±ΠΎΠ»ΡΡΠ΅ β Π»ΡΡΡΠ΅).
ΠΡΠΎΠ²Π΅Π΄Π΅ΠΌ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ ΠΈ Π²ΡΠ·ΠΎΠ²Π΅ΠΌ ΠΈΠ· Java Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΡΠΎΠΆΠ΅ ΠΏΡΡΡΠΎΠΉ, Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΠΎΡΠ°Π΄ΠΊΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² 3,3 ΡΠ°Π·Π° Π½Π° jdk8u252.
ΠΡΠΈ ΡΡΠΎΠΌ Π½Π° jdk11 Π²Ρ ΡΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΏΡΠΎΡΠ°Π΄ΠΊΡ ΡΠΆΠ΅ Π² 6 ΡΠ°Π·. ΠΡΠΈΡΠΈΠ½Ρ ΡΠ°ΠΊΠΎΠΉ ΡΠ°Π·Π½ΠΈΡΡ Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ ΡΠ°Π·Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ Java ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Π°, Π° ΡΠ΅ΠΉΡΠ°Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Π½Π°ΡΠΈ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π·Π»ΠΎΠ²Π΅ΡΠΈΠΉ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ ΠΈ Π²ΡΠ·ΠΎΠ²Π΅ΠΌ ΠΈΠ· Java Π½Π°ΡΠΈΠ², Π° ΠΎΡΡΡΠ΄Π° ΡΠ΅ΡΠ΅Π· callback ΠΏΠΎΠ·ΠΎΠ²ΡΠΌ ΠΏΡΡΡΠΎΠΉ Java-ΠΌΠ΅ΡΠΎΠ΄. ΠΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ Π·Π΄Π΅ΡΡ ΡΠ»ΡΡΠΈΡΡΡ ΠΏΡΠΎΡΠ΅Π΄Π°Π½ΠΈΠ΅ ΡΠ°Π·Π° Π² Π΄Π²Π° (Π²Π΅Π΄Ρ ΡΡΠ°Π»ΠΎ Π² Π΄Π²Π° ΡΠ°Π·Π° Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ). ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠΎΡΠ°Π΄ΠΊΠ° Π±ΡΠ΄Π΅Ρ Π² 10 ΡΠ°Π·.
Π’.Π΅.Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΈΠ· Java Π² Π½Π°ΡΠΈΠ² Π΄ΠΎΡΠΎΠΆΠ΅, ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΡΡ ΠΎΠ΄ΠΈΡΡ Π² Π½Π°ΡΠΈΠ².
ΠΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ?
ΠΡΠ»ΠΈ Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π² ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Ρ ΠΎΡΠ΅ΡΡΡ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ call, Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡ-ΡΠΎ Π°Π΄ΡΠ΅ΡΡ.
Π Π²Ρ ΡΡΠΎΡ call ΠΏΠΎΠ»ΡΡΠΈΡΠ΅, Π½ΠΎ Π²ΠΎΠΊΡΡΠ³ Π½Π΅Π³ΠΎ Π΅ΡΡΡ Π΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π±ΠΎΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΊ Π²ΡΠ·ΠΎΠ²Ρ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°.
ΠΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΊΡΠΎΠΌΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ:
Π Π²ΡΡ ΡΡΠΎ Π΄Π°ΡΡ ΠΏΡΠΎΡΠ°Π΄ΠΊΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² ΡΠ΅ΡΡΡ ΡΠ°Π·.
ΠΡΠΎΡΠ°Ρ Π²ΠΎΠ»Π½Π° ΠΏΡΠΎΡΠ°Π΄ΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, ΡΡΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠ½Π»Π°ΠΉΠ½Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ. ΠΠ±ΡΠΎΠ»ΡΡΠ½ΠΎ Π²ΡΠ°ΠΆΠ΄Π΅Π±Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΎΠ½ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, Π° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ Π΄ΡΡΠ³ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ. Π£ Π½Π°Ρ ΠΏΡΠΎΡΡΠΎ Π½Π΅Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠΈΠ½Π»Π°ΠΉΠ½ΠΈΡΡ ΡΡΠΎ Π² Java. ΠΠΎΡΡΠΎΠΌΡ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π»ΠΈ Java ΠΌΠ΅ΡΠΎΠ΄ Π±Π΅Π· ΠΈΠ½Π»Π°ΠΉΠ½Π°, ΠΈΠ½Π°ΡΠ΅ ΡΠ°Π·Π½ΠΈΡΠ° Π±ΡΠ»Π° Π±Ρ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ³ΡΠΎΠΌΠ½Π°Ρ, ΡΡΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ Π³ΡΠ°ΡΠΈΠΊΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΆΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ Π±Ρ ΡΠΌΡΡΠ»Π°.
ΠΡ ΠΈ ΠΏΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² Java β ΡΠ°ΠΊ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠ·-Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ Hotspot. ΠΠΎΠ³Π΄Π° Π²Ρ Π΄Π΅Π»Π°Π΅ΡΠ΅ callback, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΈΡΠ½Π΅ΠΉ ΠΈ ΡΡΠΆΠ΅Π»ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, Π² Π΄ΡΡΠ³ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠ³ Π±Ρ Π±ΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»ΡΡΡΠ΅.
ΠΠ° ΡΡΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠ²Π½ΠΎΠΉ Π½ΠΎΡΠ΅ ΠΌΡ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΠΌ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ ΠΏΡΠΎ JNI, ΠΈ Π²ΠΎΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΎΠ²Π΅ΡΠΎΠ² ΠΏΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π°, ΡΠ»Π΅Π΄ΡΡ ΠΊΠΎΡΠΎΡΡΠΌ, Π²Ρ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ ΠΈΠ·Π±Π΅ΠΆΠΈΡΠ΅ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ ΡΠ°Π·Π²Π°Π»ΠΎΠ².
ΠΠΎΠ΄Π²Π΅Π΄Π΅ΠΌ ΠΈΡΠΎΠ³ ΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ β Β«ΠΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ JNI Π² ΡΠ²ΠΎΡ Π²ΡΠ΅ΠΌΡ Π±ΡΠ»ΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΌ ΠΏΡΠΎΡΡΠ²ΠΎΠΌ Π² ΠΎΡΡΠ°ΡΠ»ΠΈ, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΡΠ΅Π³ΠΎΠ΄Π½Ρ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠΆ Π±ΠΎΠ»ΡΠ½ΠΎΒ».
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ JNI, ΠΈΡ ΡΠΈΠ»ΡΠ½ΡΠ΅ ΠΈ ΡΠ»Π°Π±ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π±ΡΠ΄ΡΡΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΊΠ°ΡΠ΄ΠΈΠ½Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ Π²ΡΠ΅ Π½Π°ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ Π½Π°ΡΠΈΠ²Π°Ρ Π² Java: ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Panama ΠΈ Sulong.
ΠΠΈΠ½ΡΡΠΊΠ° Π½Π°ΡΠΈΠ²Π½ΠΎΠΉ ΡΠ΅ΠΊΠ»Π°ΠΌΡ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄. Π Π°Π· Π²Ρ Π·Π΄Π΅ΡΡ β ΠΏΠΎΡ ΠΎΠΆΠ΅, Π²Ρ Java-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π±ΠΎΠΈΡΡΡ ΠΏΠΎΠΊΠΈΠ΄Π°ΡΡ ΡΡΡΠ½ΡΡ Ρ ΠΎΠ±Π±ΠΈΡΡΡ Π½ΠΎΡΡ ΠΈ ΠΏΠΎΠΊΠΎΡΡΡΡ ΡΡΠΎ-ΡΠΎ Π½ΠΎΠ²ΠΎΠ΅ Π΄Π»Ρ ΡΠ΅Π±Ρ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ Joker (25-28 Π½ΠΎΡΠ±ΡΡ, ΠΎΠ½Π»Π°ΠΉΠ½) Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ Π΄Π»Ρ Π²Π°Ρ β ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΌΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ°ΠΉΡΠ΅.