ΠΊΠ°ΠΊΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±Π°ΠΉΡ ΠΊΠΎΠ΄Π°
Java Bytecode Fundamentals
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Java ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ Π½ΡΠΆΠ΄Π°ΡΡΡΡ Π² Π·Π½Π°Π½ΠΈΠΈ ΠΎ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π΅, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ΅ΠΌΡΡ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠ΅ΠΌ, ΠΊΡΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ², ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Java ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ²ΠΎΠΈΡ
ΡΠ΅Π»ΡΡ
. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΈΠΏΠ° ASM, cglib, Javassist ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ² Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ.
Π ΡΡΠ°ΡΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½Ρ ΡΠ°ΠΌΡΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ, ΠΎΡ ΠΊΠΎΡΠΎΡΡΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΡΠ°ΡΠΊΠ°ΠΏΡΠ²Π°Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅ΠΌΡ (ΠΏΡΠΈΠΌ. ΠΏΠ΅Ρ.).
ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΠ½ΡΠΌ Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ POJO Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ»Π΅ΠΌ ΠΈ Π³Π΅ΡΡΠ΅ΡΠΎΠΌ ΠΈ ΡΠ΅ΡΡΠ΅ΡΠΎΠΌ Π΄Π»Ρ Π½Π΅Π³ΠΎ.
ΠΠΎΠ³Π΄Π° Π²Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΠ΅ ΠΊΠ»Π°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ javac Foo.java, Ρ Π²Π°Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠ°ΠΉΠ» Foo.class, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄. ΠΠΎΡ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π² HEX-ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅:
ΠΠ°ΠΆΠ΄Π°Ρ ΠΏΠ°ΡΠ° ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΡΡ ΡΠΈΡΠ΅Π» (Π±Π°ΠΉΡ) ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΠΏΠΊΠΎΠ΄Ρ (ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠ°). ΠΡΠ»ΠΎ Π±Ρ ΠΆΠ΅ΡΡΠΎΠΊΠΎ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΡΠΎ Π² Π΄Π²ΠΎΠΈΡΠ½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΡΠ½ΠΎΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ.
ΠΠ»Π°ΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ Π»Π΅Π³ΠΊΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ΠΎΠΌ. ΠΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄-Π²Π΅ΡΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (ΠΊΠ°ΠΊ ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡ JVM).
ΠΠ°Π»Π΅Π΅, ΠΈΠ·ΡΡΠ°Ρ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ΠΎΠ²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ (Ρ Π½Π°Ρ ΡΡΠΎ aload_0 ΠΈ aload_1), ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡΡ ΡΠΈΠΏΠ° aload_0 ΠΈ istore_2. ΠΡΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ. ΠΡΠ΅ΡΠΈΠΊΡ Β«aΒ» ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠΏΠΊΠΎΠ΄ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ. Β«iΒ», ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ integer.
Π’Π΅ΠΏΠ΅ΡΡ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΡΠΎ Π·Π° ΡΡΡΠ°Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, #2:
const #2 = Field #3.#18; // Foo.bar:Ljava/lang/String;
const #3 = class #19; // Foo
const #18 = NameAndType #5:#6;// bar:Ljava/lang/String;
ΠΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ (0: aload_0). ΠΡΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π²Π½ΡΡΡΠΈ ΡΡΠ΅ΠΉΠΌΠ° β Π΄Π°Π»ΡΡΠ΅ ΠΎΠ±ΡΡΡΠ½Ρ, ΡΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²Π·Π³Π»ΡΠ½ΡΡΡ Π½Π° ΠΌΠΎΠ΄Π΅Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. JVM ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠΎΠ΄Π΅Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠ΅ΠΊΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ ΡΡΠ΅Π΄ ΠΈΠΌΠ΅Π΅Ρ JVM-ΡΡΠ΅ΠΊ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΡΠ΅ΠΉΠΌΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΌΡ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π΄Π΅Π±Π°Π³Π³Π΅ΡΠ΅, ΡΠΎ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ΅ΠΉΠΌΡ:
ΠΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΡΡΠ΅ΠΉΠΌ. Π€ΡΠ΅ΠΉΠΌ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°, ΠΌΠ°ΡΡΠΈΠ²Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΈ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΏΡΠ» ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΊΠ»Π°ΡΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.
Π Π°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π°. Π‘ΡΠ΅ΠΊ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² β LIFO-ΡΡΠ΅ΠΊ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΡΡΠ΅ΠΊΠ΅; ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠΊΠΎΠ΄Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΠ΅ΠΊ, Π΄ΡΡΠ³ΠΈΠ΅ Π±Π΅ΡΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π² ΡΡΠ΅ΠΊ. Π‘ΡΠ΅ΠΊ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ (return values).
ΠΠ°ΠΉΡΠΊΠΎΠ΄ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΡΡ ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ². ΠΠ΅ΡΠ²ΡΠΉ ΠΎΠΏΠΊΠΎΠ΄, aload_0, ΠΏΡΠΎΡΠ°Π»ΠΊΠΈΠ²Π°Π΅Ρ Π² ΡΡΠ΅ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 0 ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . Π‘ΡΡΠ»ΠΊΠ° this Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² ΠΈ instance-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡ 0. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠΏΠΊΠΎΠ΄, getfield, Π΄ΠΎΡΡΠ°Π΅Ρ ΠΏΠΎΠ»Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ, areturn, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠ»ΠΊΡ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄Π°.
Π’Π°ΠΊ, Π±Π°ΠΉΡΠΊΠΎΠ΄ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° getBar β 2A B4 00 02 B0. 2A ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ aload_0, B0 β ΠΊ areturn. ΠΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΡΡΠ°Π½Π½ΡΠΌ, ΡΡΠΎ Π±Π°ΠΉΡΠΊΠΎΠ΄ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠΌΠ΅Π΅Ρ ΡΡΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π±Π°ΠΉΡ 5 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ getfield (B4) Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² Π΄Π²ΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ
(00 02), Π·Π°Π½ΠΈΠΌΠ°ΡΡΠΈΡ
ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 2 ΠΈ 3 Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, ΠΎΡΡΡΠ΄Π° ΠΈ 5 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. ΠΠ½ΡΡΡΡΠΊΡΠΈΡ areturn ΡΠ΄Π²ΠΈΠ³Π°Π΅ΡΡΡ Π½Π° 4 ΠΏΠΎΠ·ΠΈΡΠΈΡ.
Π’Π°Π±Π»ΠΈΡΠ° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΠ»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΅ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ:
ΠΠ΄Π΅ΡΡ Π΄Π²Π΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ β ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ int b. ΠΠΎΡ ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄:
LocalVariableTable:
Start Length Slot Name Signature
0 6 0 this LExample;
0 6 1 a I
2 4 2 b I
ΠΠ΅ΡΠΎΠ΄ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ 1 Ρ ΠΏΠΎΠΌΠΎΡΡΡ iconst_1 ΠΈ Π»ΠΎΠΆΠΈΡ Π΅Ρ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ 2 Ρ ΠΏΠΎΠΌΠΎΡΡΡ istore_2. Π’Π΅ΠΏΠ΅ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΠ»ΠΎΡ 2 Π·Π°Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ b, ΠΊΠ°ΠΊ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π»ΠΎΡΡ. ΠΠ°Π»Π΅Π΅, iload_1 Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ΅ΠΊ, iload_2 Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ b. iadd Π²ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅Ρ 2 ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π° ΠΈΠ· ΡΡΠ΅ΠΊΠ°, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΈΡ
ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ try-catch-finally.
ΠΠ°ΠΉΡ-ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° foo():
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π², Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ° try-catch-finally: finallyMethod() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠΈ ΡΠ°Π·Π°(!). ΠΠ»ΠΎΠΊ try ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ try Π½Π΅ Π±ΡΠ»ΠΎ ΠΈ ΠΎΠ½ Π±ΡΠ» ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ½ Ρ finally:
0: aload_0
1: invokespecial #2; //Method tryMethod:()V
4: aload_0
5: invokespecial #3; //Method finallyMethod:()V
ΠΡΠ»ΠΈ Π±Π»ΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΡΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ goto ΠΏΠ΅ΡΠ΅ΠΊΠΈΠ΄ΡΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° 30-Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ Ρ ΠΎΠΏΠΊΠΎΠ΄ΠΎΠΌ return.
ΠΡΠ»ΠΈ tryMethod Π±ΡΠΎΡΠΈΡ Exception, Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠ°Π½ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ (Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ) ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. ΠΠ· ΡΠ°Π±Π»ΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΡ Ρ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π²Π½Π° 11:
0 4 11 Class java/lang/Exception
ΠΡΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠΈΠ΄ΡΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° catchMethod() ΠΈ finallyMethod():
11: astore_1
12: aload_0
13: invokespecial #5; //ΠΌΠ΅ΡΠΎΠ΄ catchMethod:()V
16: aload_0
17: invokespecial #3; //ΠΌΠ΅ΡΠΎΠ΄ finallyMethod:()V
ΠΡΠ»ΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π±ΡΠΎΡΠ΅Π½ΠΎ Π΄ΡΡΠ³ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½Π° 23:
0 4 23 any
11 16 23 any
23 24 23 any
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ 23:
23: astore_2
24: aload_0
25: invokespecial #3; //Method finallyMethod:()V
28: aload_2
29: athrow
30: return
Π’Π°ΠΊ ΡΡΠΎ finallyMethod() Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Ρ aload_2 ΠΈ athrow, Π±ΡΠΎΡΠ°ΡΡΠΈΠΌ Π½Π΅ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠΈ Π±Π°ΠΉΡΠΊΠΎΠ΄Π° JVM. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΡΠ΅ΡΠΏΠ½ΡΡΠΎ ΠΈΠ· ΡΡΠ°ΡΡΠΈ developerWorks Peter Haggar β Java bytecode: Understanding bytecode makes you a better programmer. Π‘ΡΠ°ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ°ΡΠ΅Π»Π°, Π½ΠΎ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ Π°ΠΊΡΡΠ°Π»ΡΠ½Π°. Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ BCEL ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄ΠΎΡΡΠΎΠΉΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» Π±Ρ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π΅Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠΌΡΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π½ΠΎ Π΅Π΅ Π½Π΅Π»Π΅Π³ΠΊΠΎ ΡΠΈΡΠ°ΡΡ, ΠΊΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π», ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ²Π°Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ ΠΏΡΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ.
Π ΡΠ΅Π»ΠΎΠΌ, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄, ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π°ΠΆΠ½ΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠΌ Π² ΡΠ³Π»ΡΠ±Π»Π΅Π½ΠΈΠΈ ΡΠ²ΠΎΠΈΡ Π·Π½Π°Π½ΠΈΠΉ Π² Java-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ ΠΏΡΠΈΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°ΠΌ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌ JVM-ΡΠ·ΡΠΊΠΎΠ² ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΡΡΠΈΠ»ΠΈΡΠ°ΠΌ.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Java
May 15 Β· 6 min read
ΠΠ°ΠΆΠ΄ΠΎΠΌΡ Java-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊΡΡ ΡΠΎΠ»Ρ Π² ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ·ΡΠΊΠ° ΠΈΠ³ΡΠ°Π΅Ρ JVM. ΠΠ΄Π½Π°ΠΊΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π½Π΅ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ JVM ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ. Π₯ΠΎΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Java ΡΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΊΠΎΠ΄ ΡΡΠ°Π½Π΅Ρ Π»ΡΡΡΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ Π³Π»ΡΠ±ΠΆΠ΅ ΠΏΠΎΠΉΠΌΠ΅ΡΠ΅ JVM, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ°ΠΊ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠΈ JVM.
ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄. ΠΡΠ°ΠΊ, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Π²Π²ΠΎΠ΄Π΅ ΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° Java ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ Π²Π»ΠΈΡΠ΅Ρ Π½Π° JVM Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Java?
ΠΡΠ»ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ Π²Ρ ΡΠ»ΡΡΠ°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠΏΠΎΠ²Π΅Π΄ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Java-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ, ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Ρ.
ΠΠ°ΠΊ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄?
ΠΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Java?
ΠΡΠ»ΠΈ Π²Π°ΠΌ Ρ ΠΎΡΠ΅ΡΡΡ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ°ΠΌ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄, ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± β Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ JVM
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠ³Π»ΡΠ±Π»ΡΡΡΡΡ Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄, ΡΡΠΎΠΈΡ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ JVM Π΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ.
ΠΠ΅ΡΠΎΠ΄Ρ β ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡΠΈΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΊΠΎΠ΄Π° Π΄Π»Ρ JVM. Π‘ΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Java-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ β ΡΡΠΎ, ΠΏΠΎ ΡΡΡΠΈ, Π½Π°Π±ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ JVM. JVM ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΡΠ΅ΠΉΠΌ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΡΠ΅ΠΉΠΌ Π½Π°Π²Π΅ΡΡ ΡΡΠ΅ΠΊΠ° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Π€ΡΠ΅ΠΉΠΌ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΡ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΎΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ°ΡΡΠΈΠ² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΡΡΠ΅ΠΊ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ². ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ ΡΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ· ΡΠ΅Π±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ.
ΠΠ°ΡΡΠΈΠ² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΠ°ΡΡΠΈΠ² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΡ, Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ Ρ ΡΠ°Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄.
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π°: ΠΎΠ΄ΠΈΠ½ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, Π½ΠΎ ΡΡ ΠΎΠΆΠΈΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌ.
ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π±ΡΠ΄ΡΡ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π‘ΡΠ΅ΠΊ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ²
Π‘ΡΠ΅ΠΊ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² β ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ΅Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π²Π½ΡΡΡΠΈ ΡΡΠ΅ΠΉΠΌΠ° ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΡΡΠ΅ΠΊ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΠΈ Π·Π°Π±ΠΈΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Π²Π΅ΡΡ Π½Π΅ΠΉ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π»ΠΈΠ±ΠΎ ΡΡΠ°ΡΡΠ²ΡΡΡ Π² ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΡΡΠ΅ΠΊ, Π»ΠΈΠ±ΠΎ Π·Π°Π±ΠΈΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° load ΠΈ Π΅Π΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Ρ ΡΠ°Π½ΡΡΠ΅Π³ΠΎΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π² ΡΡΠ΅ΠΊ. ΠΠ½ΡΡΡΡΠΊΡΠΈΡ store ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΡΡΠ΅ΠΊΠ° ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄
Π Π°Π΄ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²Π³Π»ΡΠ΄Π΅ΡΡΡΡ Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄, Ρ Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΡΠΎΡΡΠΎΠΉ Java-ΠΊΠ»Π°ΡΡ:
ΠΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°
ΠΠ΄Π΅ΡΡ Π²Π°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ: ΠΈΠ½Π΄Π΅ΠΊΡΡ, Π·Π°Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° β ΠΊΠ°ΠΊ Π²ΠΈΠ΄ΠΈΠΌ, ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
Π§ΠΈΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡ Π΅Π΅ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π±Π°ΠΉΡΠ°. Π Π»ΡΠ±ΠΎΠΉ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡΠΎΠ²ΡΡ ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ², Π·Π° ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½ΠΎΠ»Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ².
ΠΡΠ²ΠΎΠ΄
ΠΠ°Π΄Π΅ΡΡΡ, Π²Π°ΠΌ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠ·Π½Π°ΡΡ ΠΊΠΎΠ΅-ΡΡΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Java. Π‘ ΡΡΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΡΠΊΠΈΠΌ Π·Π½Π°Π½ΠΈΠ΅ΠΌ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π»ΡΡΡΠ΅ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΡΠ°ΠΌΠΈΠΌ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ΠΎΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ASM.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Java
ΠΠ°ΠΆΠ΄ΠΎΠΌΡ Java-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊΡΡ ΡΠΎΠ»Ρ Π² ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ·ΡΠΊΠ° ΠΈΠ³ΡΠ°Π΅Ρ JVM. ΠΠ΄Π½Π°ΠΊΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π½Π΅ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ JVM ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ. Π₯ΠΎΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Java ΡΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΊΠΎΠ΄ ΡΡΠ°Π½Π΅Ρ Π»ΡΡΡΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ Π³Π»ΡΠ±ΠΆΠ΅ ΠΏΠΎΠΉΠΌΠ΅ΡΠ΅ JVM, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ°ΠΊ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠΈ JVM.
ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄. ΠΡΠ°ΠΊ, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Π²Π²ΠΎΠ΄Π΅ ΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° Java ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ Π²Π»ΠΈΡΠ΅Ρ Π½Π° JVM Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Java?
ΠΡΠ»ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ Π²Ρ ΡΠ»ΡΡΠ°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠΏΠΎΠ²Π΅Π΄ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Java-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ, ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Ρ.
ΠΠ°ΠΉΡ-ΠΊΠΎΠ΄ β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠΉ JVM ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π³Π΄Π΅ ΠΎΠ½Π° Π·Π°ΠΏΡΡΠ΅Π½Π°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ²ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π΅ΡΡΡ JVM Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°.
ΠΠ°ΠΊ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄?
ΠΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Java?
ΠΡΠ»ΠΈ Π²Π°ΠΌ Ρ ΠΎΡΠ΅ΡΡΡ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ°ΠΌ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄, ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± β Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ JVM
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠ³Π»ΡΠ±Π»ΡΡΡΡΡ Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄, ΡΡΠΎΠΈΡ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ JVM Π΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ.
ΠΠ΅ΡΠΎΠ΄Ρ β ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡΠΈΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΊΠΎΠ΄Π° Π΄Π»Ρ JVM. Π‘ΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Java-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ β ΡΡΠΎ, ΠΏΠΎ ΡΡΡΠΈ, Π½Π°Π±ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ JVM. JVM ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΡΠ΅ΠΉΠΌ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΡΠ΅ΠΉΠΌ Π½Π°Π²Π΅ΡΡ ΡΡΠ΅ΠΊΠ° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Π€ΡΠ΅ΠΉΠΌ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΡ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΎΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ°ΡΡΠΈΠ² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΡΡΠ΅ΠΊ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ². ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ ΡΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ· ΡΠ΅Π±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ.
ΠΠ°ΡΡΠΈΠ² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΠ°ΡΡΠΈΠ² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΡ, Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ Ρ ΡΠ°Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄.
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π°: ΠΎΠ΄ΠΈΠ½ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, Π½ΠΎ ΡΡ ΠΎΠΆΠΈΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌ.
ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π±ΡΠ΄ΡΡ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π‘ΡΠ΅ΠΊ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ²
Π‘ΡΠ΅ΠΊ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² β ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ΅Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π²Π½ΡΡΡΠΈ ΡΡΠ΅ΠΉΠΌΠ° ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΡΡΠ΅ΠΊ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΠΈ Π·Π°Π±ΠΈΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Π²Π΅ΡΡ Π½Π΅ΠΉ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π»ΠΈΠ±ΠΎ ΡΡΠ°ΡΡΠ²ΡΡΡ Π² ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΡΡΠ΅ΠΊ, Π»ΠΈΠ±ΠΎ Π·Π°Π±ΠΈΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° load ΠΈ Π΅Π΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Ρ ΡΠ°Π½ΡΡΠ΅Π³ΠΎΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π² ΡΡΠ΅ΠΊ. ΠΠ½ΡΡΡΡΠΊΡΠΈΡ store ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΡΡΠ΅ΠΊΠ° ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄
Π Π°Π΄ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²Π³Π»ΡΠ΄Π΅ΡΡΡΡ Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄, Ρ Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΡΠΎΡΡΠΎΠΉ Java-ΠΊΠ»Π°ΡΡ:
ΠΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°
ΠΠ΄Π΅ΡΡ Π²Π°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ: ΠΈΠ½Π΄Π΅ΠΊΡΡ, Π·Π°Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° β ΠΊΠ°ΠΊ Π²ΠΈΠ΄ΠΈΠΌ, ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
Π§ΠΈΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡ Π΅Π΅ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π±Π°ΠΉΡΠ°. Π Π»ΡΠ±ΠΎΠΉ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡΠΎΠ²ΡΡ ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ², Π·Π° ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½ΠΎΠ»Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ².
ΠΡΠ²ΠΎΠ΄
ΠΠ°Π΄Π΅ΡΡΡ, Π²Π°ΠΌ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠ·Π½Π°ΡΡ ΠΊΠΎΠ΅-ΡΡΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Java. Π‘ ΡΡΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΡΠΊΠΈΠΌ Π·Π½Π°Π½ΠΈΠ΅ΠΌ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π»ΡΡΡΠ΅ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΡΠ°ΠΌΠΈΠΌ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ΠΎΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ASM.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Java
ΠΠ°ΠΆΠ΄ΠΎΠΌΡ Java-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊΡΡ ΡΠΎΠ»Ρ Π² ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ·ΡΠΊΠ° ΠΈΠ³ΡΠ°Π΅Ρ JVM. ΠΠ΄Π½Π°ΠΊΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π½Π΅ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ JVM ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ. Π₯ΠΎΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Java ΡΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΊΠΎΠ΄ ΡΡΠ°Π½Π΅Ρ Π»ΡΡΡΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ Π³Π»ΡΠ±ΠΆΠ΅ ΠΏΠΎΠΉΠΌΠ΅ΡΠ΅ JVM, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ°ΠΊ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠΈ JVM.
ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄. ΠΡΠ°ΠΊ, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Π²Π²ΠΎΠ΄Π΅ ΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° Java ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ Π²Π»ΠΈΡΠ΅Ρ Π½Π° JVM Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Java?
ΠΡΠ»ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ Π²Ρ ΡΠ»ΡΡΠ°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠΏΠΎΠ²Π΅Π΄ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Java-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ, ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Ρ.
ΠΠ°ΠΉΡ-ΠΊΠΎΠ΄ β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠΉ JVM ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π³Π΄Π΅ ΠΎΠ½Π° Π·Π°ΠΏΡΡΠ΅Π½Π°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ²ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π΅ΡΡΡ JVM Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°.
ΠΠ°ΠΊ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄?
ΠΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Java?
ΠΡΠ»ΠΈ Π²Π°ΠΌ Ρ ΠΎΡΠ΅ΡΡΡ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ°ΠΌ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄, ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± β Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ JVM
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠ³Π»ΡΠ±Π»ΡΡΡΡΡ Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄, ΡΡΠΎΠΈΡ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ JVM Π΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ.
ΠΠ΅ΡΠΎΠ΄Ρ β ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡΠΈΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΊΠΎΠ΄Π° Π΄Π»Ρ JVM. Π‘ΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Java-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ β ΡΡΠΎ, ΠΏΠΎ ΡΡΡΠΈ, Π½Π°Π±ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ JVM. JVM ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΡΠ΅ΠΉΠΌ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΡΠ΅ΠΉΠΌ Π½Π°Π²Π΅ΡΡ ΡΡΠ΅ΠΊΠ° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Π€ΡΠ΅ΠΉΠΌ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΡ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΎΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ°ΡΡΠΈΠ² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΡΡΠ΅ΠΊ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ². ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ ΡΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ· ΡΠ΅Π±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ.
ΠΠ°ΡΡΠΈΠ² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΠ°ΡΡΠΈΠ² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΡ, Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ Ρ ΡΠ°Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄.
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π°: ΠΎΠ΄ΠΈΠ½ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, Π½ΠΎ ΡΡ ΠΎΠΆΠΈΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌ.
ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π±ΡΠ΄ΡΡ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π‘ΡΠ΅ΠΊ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ²
Π‘ΡΠ΅ΠΊ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² β ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ΅Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π²Π½ΡΡΡΠΈ ΡΡΠ΅ΠΉΠΌΠ° ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΡΡΠ΅ΠΊ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΠΈ Π·Π°Π±ΠΈΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Π²Π΅ΡΡ Π½Π΅ΠΉ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π»ΠΈΠ±ΠΎ ΡΡΠ°ΡΡΠ²ΡΡΡ Π² ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΡΡΠ΅ΠΊ, Π»ΠΈΠ±ΠΎ Π·Π°Π±ΠΈΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° load ΠΈ Π΅Π΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Ρ ΡΠ°Π½ΡΡΠ΅Π³ΠΎΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π² ΡΡΠ΅ΠΊ. ΠΠ½ΡΡΡΡΠΊΡΠΈΡ store ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΡΡΠ΅ΠΊΠ° ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄
Π Π°Π΄ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²Π³Π»ΡΠ΄Π΅ΡΡΡΡ Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄, Ρ Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΡΠΎΡΡΠΎΠΉ Java-ΠΊΠ»Π°ΡΡ:
ΠΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°
ΠΠ΄Π΅ΡΡ Π²Π°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ: ΠΈΠ½Π΄Π΅ΠΊΡΡ, Π·Π°Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° β ΠΊΠ°ΠΊ Π²ΠΈΠ΄ΠΈΠΌ, ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
Π§ΠΈΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡ Π΅Π΅ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π±Π°ΠΉΡΠ°. Π Π»ΡΠ±ΠΎΠΉ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡΠΎΠ²ΡΡ ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ², Π·Π° ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½ΠΎΠ»Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ².
ΠΡΠ²ΠΎΠ΄
ΠΠ°Π΄Π΅ΡΡΡ, Π²Π°ΠΌ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠ·Π½Π°ΡΡ ΠΊΠΎΠ΅-ΡΡΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Java. Π‘ ΡΡΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΡΠΊΠΈΠΌ Π·Π½Π°Π½ΠΈΠ΅ΠΌ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π»ΡΡΡΠ΅ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΡΠ°ΠΌΠΈΠΌ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ΠΎΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ASM.
ΠΡΠ½ΠΎΠ²Ρ Java Bytecode
Π§ΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΈ ΠΊΠΎΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠ°ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ»Π°ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΠΆΠ΅Π»ΠΎΠΉ ΠΈ ΠΎΠ±ΡΠ΅ΠΌΠ½ΠΎΠΉ
Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Ρ Java Bytecode. ΠΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ Π΅Π³ΠΎ ΠΎΡΠ½ΠΎΠ²Π°ΠΌΠΈ, ΡΡΠ°ΡΡΡ Π²ΡΡΠ΄ Π»ΠΈ Π±ΡΠ΄Π΅Ρ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Π½Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ΅ΠΌΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ΅ΠΉΠΌΡ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ), ΠΈΠ½Π°ΡΠ΅ ΠΎΠ½Π° Π±Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»Π°ΡΡ Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅
ΠΠ°ΡΠ΅ΠΌ Π·Π½Π°ΡΡ ΡΡΠΎ-ΡΠΎ ΠΎ Bytecode
Π’Π΅ΠΌΠ° bytecode Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΊΡΡΠ½Π°Ρ ΠΈ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΡΡΠ΅Π΄Π½Π΅ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ.
Π’Π°ΠΊ ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎΠΈΡ Π·Π½Π°ΡΡ ΠΏΡΠΎ ΠΎΡΠ½ΠΎΠ²Ρ bytecode:
ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ ΡΡΠΈΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Java Machine ΠΈ Ρ ΠΎΡΠ΅ΡΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ Π»Π΅ΠΆΠΈΡ Π² ΠΎΡΠ½ΠΎΠ²Π΅
ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ ΡΡΠΎ-ΡΠΎ ΡΠΈΡ ΠΎ Π΄Π΅Π»Π°ΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ bytecode ΠΈ ΡΠ°ΡΡΠΎ ΠΌΠΎΠ³ΡΡ ΡΡΠΎ-ΡΠΎ ΡΠ°ΠΌ ΡΠ»ΠΎΠΌΠ°ΡΡ (ΠΏΡΠΈΠ²Π΅Ρ, Lombok)
ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΡΠ°Π»ΠΎ ΡΠΊΡΡΠ½ΠΎ π
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΡΠΈΠ»ΠΈΡΠΎΠΉ
javap ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΈΠ· Π½ΠΈΡ .
Π‘ΠΌΠΎΡΡΠ΅ΡΡ Π±ΡΠ΄Π΅ΠΌ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ java.lang.Object
ΠΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
ΠΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ ΠΊΠ»Π°ΡΡΠ°ΠΌ, ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΠΈ ΠΏΠΎΠ»ΡΠΌ (ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ)
ΠΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ
ΠΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (verbose), ΡΠ°ΠΊΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ° ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π²Π΅ΡΡΠΈΠΈ ΠΈ Ρ.Π΄.
Π IDEA ΠΈΠΌΠ΅Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°:


ΠΠ΅ΡΡΠΈΠΈ class ΡΠ°ΠΉΠ»ΠΎΠ²
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ class ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠ°ΠΊΠ°Ρ jvm ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ:
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ major Π²Π΅ΡΡΠΈΠΈ
ΠΠ»Ρ Π²Π΅ΡΡΠΈΠΈ Java, Π½Π°ΡΠΈΠ½Π°Ρ Ρ 5, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΡΠΌΡΠ»Π° Major-44=ΠΠ΅ΡΡΠΈΡ Java
access_flags
Flag Name (ΠΠΌΡ ΡΠ»Π°Π³Π°)
public, Π²ΠΈΠ΄Π΅Π½ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°
final ; Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΡΠΏΠ΅Ρ-ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠ³Π΄Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ invokespecial. (ΡΡΡΠ»ΠΊΠ° Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅)
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, Π½Π΅ ΠΊΠ»Π°ΡΡ
ΠΠ±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½
Π‘ΠΈΠ½ΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ, Π½Π΅ ΠΈΠ· ΠΊΠΎΠ΄Π°
ΠΠΎΠ΄ΡΠ»Ρ, Π½Π΅ ΠΊΠ»Π°ΡΡ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
ΠΠ½ΡΡΡΡ Bytecode
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ°ΠΉΠ»:
ΠΠ΅ΡΡΠΈΡ 55.0, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π²Π΅ΡΡΠΈΠΈ Java 11 (55-44=11)
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°ΠΉΠ» Ρ ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΠΎΠ»Π΅ΠΌ :
Π§Π°ΡΡΡ bytecode, ΠΊΠ°ΡΠ°ΡΡΠ°ΡΡΡ ΠΏΠΎΠ»Ρ:
ΠΠ»Ρ ΠΏΠΎΠ»Π΅ΠΉ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΡΠ»Π°Π³ΠΈ Π΄ΠΎΡΡΡΠΏΠ°, ΠΈΠΌΡ, ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ (ΡΠΈΠ³Π½Π°ΡΡΡΠ° ΠΏΠΎΠ»Ρ) ΠΈ Π°ΡΡΠΈΠ±ΡΡΡ (Π·Π΄Π΅ΡΡ, ConstantValue)
Π‘ΠΈΠ³Π½Π°ΡΡΡΡ (descriptor) Π΄Π»Ρ ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ:
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠ»Π°ΡΡ:
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΡ.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π°
ΠΡΠ½ΠΎΠ²Ρ
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ.
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ JVM Π·Π°Π½ΠΈΠΌΠ°ΡΡ 1 Π±Π°ΠΉΡ, Π·Π°ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ (Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π΅ΡΡΡ).
iconst_1. ΠΠ»Π°Π΄Π΅Ρ Π½Π° ΡΡΠ΅ΠΊ 1.
istore_1. Π‘Π½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 1
iload_1. ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 1.
iconst_2. ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 2.
iadd. Π‘Π½ΠΈΠΌΠ°Π΅Ρ Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π²Π° ΡΠ΅Π»ΡΡ ΡΠΈΡΠ»Π°, ΡΡΠΌΠΌΠΈΡΡΠ΅Ρ ΠΈΡ ΠΈ ΠΊΠ»Π°Π΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°
istore_2. Π‘Π½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 2
getstatic #2. ΠΠ°Ρ ΠΎΠ΄ΠΈΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² ΠΏΡΠ»Π΅ ΠΏΠΎΠ΄ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ #2 ΠΈ ΠΊΠ»Π°Π΄Π΅Ρ Π΅Π΅ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°
iload_2. ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 2.
invokevirtual #3. ΠΠ°Ρ ΠΎΠ΄ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ Π² ΠΏΡΠ»Π΅ ΠΏΠΎΠ΄ #3, ΡΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄. ΠΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΠΎ-ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ, ΠΊΠ»Π°Π΄Π΅Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°.
ΠΠ°ΠΊ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ΅ (Π°Π½ΠΈΠΌΠ°ΡΠΈΡ):
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ if
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΈΠΊΠ»ΠΎΠ²
Π¦ΠΈΠΊΠ»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ if.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ Π΅Π³ΠΎ Π±Π°ΠΉΡΠΊΠΎΠ΄:
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ switch
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ throw
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠ½ Π²ΡΠ²Π΅Π΄Π΅Ρ:
ΠΠ΄Π΅ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π°ΡΡ Exception table, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈ Π²ΠΈΠ΄Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ²Π΅ΡΡ Ρ Π²Π½ΠΈΠ· Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΠΎΡΠΊΠΈ, Π³Π΄Π΅ ΠΎΠ½Π° ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»Π°ΡΡ.
ΠΠΎΠ³Π΄Π° ΠΌΡ Π΄ΠΎΡΠ»ΠΈ Π΄ΠΎ 9 ΡΡΡΠΎΡΠΊΠΈ, Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° Π²ΡΠ±ΡΠΎΡΠΈΠ»Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. Π Π½Π°ΡΠ°Π»Π° ΡΠΌΠΎΡΡΠ΅ΡΡ Π² Exception table. ΠΠ΅ΡΠ²Π°Ρ Π·Π°ΠΏΠΈΡΡ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ ΡΡΠ»ΠΎΠ²ΠΈΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ (ΡΡΡΠΎΡΠΊΠ° 9 Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π΅ ΠΎΡ 0 Π΄ΠΎ 10 ΠΈ ΡΠΊΠ°Π·Π°Π½ RuntimeException) ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° ΡΡΡΠΎΡΠΊΡ 10.
ΠΠ°Π»ΡΡΠ΅ ΠΌΡ Π΄ΠΎΡ ΠΎΠ΄ΠΈΠΌ Π΄ΠΎ ΡΡΡΠΎΡΠΊΠΈ 31 ΠΈ ΡΠ½ΠΎΠ²Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π²ΡΠ±ΡΠΎΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. Π‘ΠΌΠΎΡΡΠ΅ΡΡ ΠΌΡ ΡΠ΅ΠΏΠ΅ΡΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Ρ 2 ΡΡΡΠΎΡΠΊΠΈ ExceptionTable. ΠΠ½Π° Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π½Π° 3, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ, ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° 32 ΡΡΡΠΎΡΠΊΡ.
ΠΡΠ·ΠΎΠ²Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² (opcode: invokestatic, invokespecial, invokevirtual, invokeinterface, invokedynamic)
invokestatic
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°. (ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ /Static Dispatch)
invokespecial
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° (ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅/Static Dispatch).
ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ.
Bytecode Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΊΠ»Π°ΡΡΠ° Son
invokevirtual
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΊΠ»Π°ΡΡΠ°, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠΈΡΠΊ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°ΡΡ, ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ (Dynamic Dispatch). Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ, ΡΠΎ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅, ΠΏΠΎΡΠΎΠΌ Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΠ»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π² HotSpot ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΡ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ.
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ
Bytecode Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΊΠ»Π°ΡΡΠ° Son
Π’Π΅ΠΏΠ΅ΡΡ Π² ΡΡΡΠΎΡΠΊΠ°Ρ 5 ΠΈ 10 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ invokevirtual.
invokeinterface
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° (Dynamic Dispatch). ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ.
ΠΠ° 9 ΡΡΡΠΎΡΠΊΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
invokedynamic
ΠΡΠ·ΠΎΠ² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ-Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΡ call sites. Π‘Π΅ΠΉΡΠ°Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Java Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π΄Π»Ρ Π»ΡΠΌΠ±Π΄. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠΉ opcode, Π·Π°ΠΉΠΌΠ΅Ρ Π½Π΅ ΠΎΠ΄Π½Ρ ΡΡΠ°ΡΡΡ ΠΈ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΡ
Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ opcode
ΠΠΎΠ»Π½Π°Ρ ΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎ Π΄ΠΎΡΡΠΎΠ²Π΅ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠ°ΠΉΡΠ΅ Oracle.
aconst_null (0x1)
ΠΠΎΠ»ΠΎΠΆΠΈΡΡ Π½Π° ΡΡΠ΅ΠΊ null
Π€ΠΎΡΠΌΠ°Ρ: dload index












