Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π΄Π°ΠΌΠΏΠΈΡΡ ΠΈΠ³ΡΡ
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π΄Π°ΠΌΠΏΠΈΡΡ ΠΈΠ³ΡΡ
Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π½Π΅ Ρ Π²ΡΠ΅Ρ
Π΅ΡΡΡ Π²ΡΡΠΎΠΊΠΎΡΠΊΠΎΡΠΎΡΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ, Π° ΡΠ΅ΡΠ΅Π· Π΄ΠΈΠ°Π»-Π°ΠΏ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈΠ³ΡΡ Π²Π»Π΅ΡΠ°Π΅Ρ Π² ΠΊΠΎΠΏΠ΅Π΅ΡΠΊΡ,
Ρ ΡΠ΅ΡΠΈΠ», ΡΡΠΎ ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ΅ΠΉ ΡΠ°ΠΊ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ISO ΠΎΠ±ΡΠ°Π·ΠΎΠ² ΠΈΠ³Ρ.
ΠΠ°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Fastloader ΠΈ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, UMD Π΄ΠΈΡΠΊ, Π΄Π°ΠΌΠΏ/ΠΎΠ±ΡΠ°Π· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ Π΄Π΅Π»Π°ΡΡ.
Π‘ΠΊΠ°ΡΠ°ΡΡ: Fastloader_v0.7.rar ( 628.82 ΠΠ )
1). Π£Π±Π΅Π΄ΠΈΠ²ΡΠΈΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ UMD Π΄ΠΈΡΠΊ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΡΠΈΠ²ΠΎΠ΄Π΅, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
2). Π ΠΌΠ΅Π½Ρ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ½ΠΊΡ -Dump inserted UMD! β Π΄Π°Π»Π΅Π΅ Π±ΡΠ΄Π΅Ρ ΡΡΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ Π½Π΅ΠΏΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠ΅Π½ΠΈΡΠ΅ (!)
3). Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ 2 ΡΠΏΠΎΡΠΎΠ±Π° Π΄Π°ΠΌΠΏΠ° Π΄ΠΈΡΠΊΠ°: Ρ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° ΡΠ°ΡΡΠΈ ΠΈ Π±Π΅Π· ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
ΠΠ°ΡΠ½Ρ ΡΠΎ 2-Π³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° (ΠΎΠ½ Π΄Π»Ρ ΡΠ΅Ρ , Ρ ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΡΡΠ° Π±ΠΎΠ»ΡΡΠ΅ 1ΠΠ):
ΠΠ»Π°Π²ΠΈΡΠ°ΠΌΠΈ Π²Π»Π΅Π²ΠΎ/Π²ΠΏΡΠ°Π²ΠΎ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ No splitting (dig. left/right to change) ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Β«Π₯Β».
ΠΠ°ΠΌΠΏ Π½Π°ΡΠ°Π»ΡΡ. ΠΠΎΡΠ»Π΅ Π΅Π³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π·Π°Ρ
ΠΎΠ΄ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΡ ISO Π½Π° PSP, Π½Π°Ρ
ΠΎΠ΄ΠΈΠΌ ΡΠ°ΠΌ Π½Π°Ρ ΡΠ°ΠΉΠ» My latest dump ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π΅ΠΌΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ISO. ΠΡΡ.
Π ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΏΠΎΡΠΎΠ± Ρ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° ΡΠ°ΡΡΠΈ:
ΠΡΠΎΡΠ΅ΡΡ ΡΠ½ΡΡΠΈΡ Π΄Π°ΠΌΠΏΠ° Π·Π°Π²Π΅ΡΡΡΠ½. ΠΠ° Π΄ΠΈΡΠΊΠ΅ Π‘ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΡΠΈ ΡΠ°ΠΉΠ»Π° My latest dump (Part 1),My latest dump (Part 2) ΠΈ My latest dump (Part 3).
ΠΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²ΡΠ²Π°Π΅ΠΌ Π½Π°ΡΠΈ ΡΠ°ΠΉΠ»Ρ Π² Part1, Part2 ΠΈ Part3, ΡΠ°ΠΊ Π»Π΅Π³ΡΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡ
ΡΠΊΠ»Π΅ΠΈΠ²Π°ΡΡ. Π ΠΌΠ΅Π½Ρ Β«ΠΠ£Π‘ΠΒ» Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Β«ΠΠ«ΠΠΠΠΠΠ’Π¬Β» ΠΈ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ cmd
Π’Π΅ΠΏΠ΅ΡΡ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΡΡΡ ΡΡΡΠΎΡΡ: C:\Documents and Settings\Sergey>copy /b part1+part2+part3 gtalcs.iso
Π‘ΠΊΠ»Π΅ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π°ΡΠ°Π»ΠΎΡΡ. ΠΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ Π·Π°Π±ΠΈΡΠ°Π΅ΡΠ΅ Π²Π°ΡΡ ΠΈΡΠΎΡΠΊΡ ΠΈΠ· ΡΡΠΎΠΉ ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΠΈ.
Π’Π°ΠΊ ΠΆΠ΅ Ρ
ΠΎΡΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π΄Π°ΠΌΠΏΡ ΠΈΠ³Ρ Π²Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΎΠ²Π΅ΡΡΡ ΡΠΊΠ°ΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ PSP ISO Compressor, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΡΡ
Π²Π°ΠΌ ΡΠΆΠ°ΡΡ Π²Π°ΡΡ ISO-ΡΠΊΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π² 2 ΡΠ°Π·Π° (Π΄ΠΎΠΏΡΡΡΠΈΠΌ ΠΏΠ΅ΡΠ΅Π΄Π΅Π»Π°Π² Π΅Ρ Π² cso), ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠΊΠΎΠ½ΠΎΠΌΡ ΠΌΠ΅ΡΡΠΎ Π½Π° Π²Π°ΡΠ΅ΠΉ ΠΊΠ°ΡΡΠ΅.
Π‘ΠΊΠ°ΡΠ°ΡΡ: PSP_ISO_Compressor_v1.4.rar ( 349.31 ΠΠ )
ΠΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΡΠΎΡ ΡΠΏΠΎΡΠΎΠ±:
UMD Dax Dumper ΠΊΠ°ΠΊ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Fastloader
Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΎΠ±Π»Π°Π΄Π°ΡΠ΅Π»Π΅ΠΉ ΠΊΠ°ΡΡΠΎΠΌ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΊ. Π‘ΠΊΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ UMD Dax Dumper ΠΈ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°Π΅ΠΌΡΡ Π΄Π°ΠΌΠΏΠ°ΠΌΠΈ ΠΈΠ³Ρ!
ΠΡΠΈΠ½ΡΠΈΠΏ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² Fastloader-e, Ρ.Ρ. ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌΡΡ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠ² ΠΏΠΎ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌ VSH Menu :
1). ΠΡΡΠ°Π²Π»ΡΠ΅ΠΌ UMD Π΄ΠΈΡΠΊ Π² ΠΏΡΠΈΠ²ΠΎΠ΄ PSP ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΠΈΡΡΠ°ΠΊΡ ΠΊ ΠΠ ΠΏΠΎ USB ΠΊΠ°Π±Π΅Π»Ρ
2). ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡΡ SELECT
3). Π ΠΏΡΠ½ΠΊΡΠ΅ «USB Device» Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΠΌ «UMD Disk» ΠΈ Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ ΠΌΠ΅Π½Ρ Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡΠΈ SELECT ΠΈΠ»ΠΈ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ «EXIT»
4). ΠΠ° ΠΏΡΠΈΡΡΠ°Π²ΠΊΠ΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ «Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ USB» Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
5). ΠΠΎΠΏΠΈΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π· ΠΈΠ· ΠΎΡΠΊΡΡΠ²ΡΠ΅ΠΉΡΡ ΠΏΠ°ΠΏΠΊΠΈ Π½Π° Π²Π°Ρ ΠΠ
6). ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π· Π½Π° ΠΊΠ°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ Π² ΠΏΠ°ΠΏΠΊΡ ms0:/ISO/
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π΄Π°ΠΌΠΏΠΈΡΡ ΠΈΠ³ΡΡ
ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ NoNpDrm ( Coming Soon )
ΠΠ°Ρ
ΠΎΠ΄ΠΈΡΠ΅ Homebrew, Π·Π°Π³ΡΡΠΆΠ°ΠΉΡΠ΅ Π½Π°ΠΏΡΡΠΌΡΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΠΈ ΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ.
ΠΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π²Π°ΡΠ΅ΠΉ ΠΊΠ°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ
ΠΠ°ΠΆΠ½ΠΎ:
— ΠΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Ρ ΠΊ WiFi
— ΠΠ΅ΡΠ²ΡΠΉ Π·Π°ΠΏΡΡΠΊ Π·Π°ΠΉΠΌΠ΅Ρ ΠΎΠΊΠΎΠ»ΠΎ Π΄Π²ΡΡ
ΠΌΠΈΠ½ΡΡ
Π‘ΠΊΠΎΡΠΎ:
— ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²
— ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
— Π ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ
Π‘ΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ Homebrew Π΄Π»Ρ PS VITA: GBATemp
ΠΡΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΌΡΠ»ΡΡΠΎΡ ΡΠ²ΠΈΠ΄ΠΈΡΡ ux0:/data/Snes9xVITA/
Π₯ΠΎΡΡ ΡΠ°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ΠΏΠ°ΠΏΠΊΠ°ΠΌ Π»Π°Π·ΠΈΡΡ ΡΠ°ΠΊ ΡΡΠΎ Π½Π΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ. Π Π²ΠΎΡ ΠΈΠ³ΡΡ ΠΊΠΈΠ΄Π°ΡΡ Π½Π΅ Π² Π°ΡΡ
ΠΈΠ²Π΅
ΠΠ»Ρ nes ΡΡΠ°Π·Ρ ΡΡΠΈ ΡΠΌΡΠ»ΡΡΠΎΡΠ° ΠΎΡ RetroArch
Unbe, Π½Π° Π²ΠΈΡΠ΅ Π² Π²ΠΈΠ΄Π΅ Ρ ΠΎΠΌΠΊΠΈ Π΅ΡΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΠΡΠ°ΠΊΠ°.
Rand0rnV, Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ Π΄ΡΠΌΠ°Ρ.ΠΡΠΈΠ΄ΡΠΌΠ°ΠΉ ΠΏΡΠΈΡΠΈΠ½Ρ Π·Π°ΡΠ΅ΠΌ ΡΡΠΎ Π½Π°Π΄ΠΎ, ΠΊΡΠΎΠΌΠ΅ Ρ ΡΠΆΠ΅ ΠΊΡΠΏΠΈΠ» ΠΠΈΡΡ ΠΈ ΡΠΌΠ°ΡΡΡΠΎΠ½ ΠΌΠ½Π΅ ΡΠ΅ΠΏΠ΅ΡΡ Π½Π΅ ΡΠ²Π΅ΡΠΈΡ? π Π£ΠΆΠ΅ Π΄Π°Π²Π½ΠΎ Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΎΡΡΠ½ΠΎΠΉ ΠΈΠ³ΡΡ Π½Π° Π°Π½Π΄ΡΠΎΠΈΠ΄Π΅. Π’ΡΡ ΠΈ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΡΠΎ ΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ ΠΈ Π±Π»ΡΡΡΠ· Π΄ΠΆΠΎΠΉΡΡΠΈΠΊΠΈ Π² ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠ°Π²ΠΈΡΡ Π»ΡΠ±ΠΎΠΉ Π°ΠΏΠΏΠ°ΡΠ°Ρ ΠΈ ΠΈΠ³ΡΠ°ΡΡ ΠΈ Π΄Π°ΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΎΠ±ΡΡΠ½ΡΠ΅ Π³Π΅ΠΉΠΌΠΏΠ°Π΄Ρ ΠΊ ΡΠ΅Π»Π΅ΡΠΎΠ½Ρ Π½Π° Π°Π½Π΄ΡΠΎΠΈΠ΄Π΅.
ΠΠΎΠΎΠ±ΡΠ΅, ΡΠ΅ΡΠΈΡ Castlevania, ΠΎΠ½Π° Π½Π° Π³ΠΎΠ»ΠΎΠ²Ρ ΠΏΡΠ΅Π²ΠΎΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠ±ΠΎΠΉ ΠΊΠ°ΠΊ ΠΏΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ, ΡΠ°ΠΊ ΠΈ ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°/ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΈΡΠ°. ΠΡΡΠ³ΠΎΠ΅ Π΄Π΅Π»ΠΎ, ΡΡΠΎ Π½Π° ΠΠΈΡΠ΅ Π΅Ρ Π½Π΅ΡΡ. ΠΠΈΠ΄ ΡΠ±ΠΎΠΊΡ, ΠΊΠ°ΠΊ ΡΡ ΠΈ Ρ
ΠΎΡΠ΅ΡΡ.
ΠΠ° Π²ΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΡ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Shiren the Wanderer: The Tower of Fortune and the Dice of Fate, Π²ΠΈΠ΄ ΡΠ²Π΅ΡΡ
Ρ. ΠΠΎ ΠΎΠ½Π° Π΅ΡΡ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΡΠ°Π½Π΄ΠΎΠΌΠ½Π΅Π΅. ΠΠ½Π° «ΠΏΠΎΡΠ°Π³ΠΎΠ²Π°Ρ», ΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠ³Π΄Π° ΡΡ Π΄Π΅Π»Π°Π΅ΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, Π΅Π³ΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΈ ΡΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ Π²ΠΎΠΊΡΡΠ³ ΡΠ΅Π±Ρ. ΠΡΠΌΠ°Ρ, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ ΠΈΠ³ΡΠ°Π» Π² ΡΠΎΠ³Π°Π»ΠΈΠΊΠΈ, ΡΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΡ ΠΎ ΡΡΠΌ Ρ.
Unbe,
Bastion, Super Meat Boy, Hotline Miami 1/2
Salt and Sanctuary Π²ΡΠΎΠ΄Π΅ Π΅ΡΠ΅ Π½Π΅ Π²ΡΡΠ»Π° Π΄Π»Ρ Π²ΠΈΡΡ.
ΠΠΎΡ ΠΊΡΡΠ°ΡΠΈ Π΄Π°, Ρ ΠΎΡΠΎΡΠΎ Π±Ρ ΠΏΠ°ΡΠ°Π½Π° ΠΌΡΡΠ½ΠΎΠ³ΠΎ, Π²ΡΠΎΠ΄Π΅ Π½Π΅ΡΡ Π΄Π°ΠΌΠΏΠΎΠ² Π½ΠΈΠ³Π΄Π΅
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π»ΠΈ Π±ΡΠ΄Π΅Ρ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π½ΠΎΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Ρ ios ΠΈ steam Π²Π΅ΡΡΠΈΠΉ ΠΈΠ³ΡΡ Π΄Π»Ρ Π²ΠΈΡΡ. ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Star Ocean, I am Setsuna ΠΈ Chaos Rings 3 ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠ²ΠΎΡ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, Π½ΠΎ Π²Π΅ΡΡΠΈΠΈ Π΄Π»Ρ Π²ΠΈΡΡ ΠΎΡΡΠ°Π»ΠΈΡΡ Π±Π΅Π· Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ.
ΠΡΠ»ΠΈΡΠ½ΠΎ! Π‘ΠΊΠΎΡΠ΅Π΅ Π±Ρ Π½Π° Vita. ΠΠ° ΠΠ ΠΈΠ³ΡΠ°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ?
UPD. ΠΠΎΡΠΈΡΠ°Π» ΠΎΠ±Π·ΠΎΡΡ, ΠΊΠ°ΠΏΠ΅Ρ Ρ Π΅Π΅ ΠΆΠ΄Ρ Π½Π° ΠΠΈΡΡ ΡΠ΅ΠΏΠ΅ΡΡ..
ΠΡΡ, ΡΡΠΎ Π²Ρ Ρ ΠΎΡΠ΅Π»ΠΈ Π·Π½Π°ΡΡ ΠΎ ΡΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡΠ°Ρ ΠΈ Ρ ΠΈΠΏ-Π΄Π°ΠΌΠΏΠ°Ρ . Π§Π°ΡΡΡ 2
ΠΡΡ, ΡΡΠΎ Π²Ρ Ρ
ΠΎΡΠ΅Π»ΠΈ Π·Π½Π°ΡΡ ΠΎ ΡΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡΠ°Ρ
ΠΈ Ρ
ΠΈΠΏ-Π΄Π°ΠΌΠΏΠ°Ρ
. Π§Π°ΡΡΡ 1
ΠΠ΅ΡΠ΅Π΄ Π²Π°ΠΌΠΈ Π²ΡΠΎΡΠ°Ρ ΡΠ°ΡΡΡ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΠ½Π΄ΡΠ΅Ρ ΠΠ°Π½ΡΠ³ΠΈΠ½Π° aka apangin ΠΈΠ· ΠΠ΄Π½ΠΎΠΊΠ»Π°ΡΡΠ½ΠΈΠΊΠΎΠ² Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· JUG’ΠΎΠ² (Π΄ΠΎΠΏΠΈΠ»Π΅Π½Π½Π°Ρ ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ Π΅Π³ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π° Ρ JPoint 2016). Π ΡΡΠΎΡ ΡΠ°Π· ΠΌΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΠΌ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ ΠΎ ΡΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡΠ°Ρ
, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Π΄Π°ΠΌΠΏΠ°Ρ
ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ Ρ
ΠΈΠΏ-Π΄Π°ΠΌΠΏΠ°Ρ
.
Π Π°Π· ΡΠΆ ΠΌΡ Π·Π°Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΎ ΡΠ΅ΠΊΡΡΡΠΈΠΈ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ Ρ Π·Π°ΠΏΡΡΡ Π²ΠΎΡ ΡΠ°ΠΊΠΎΠΉ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½ΠΈΠΊΡΠ΄Π° Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ:
Π‘ΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠΉΠ΄Π΅Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠ², ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΠΎΡΠ²ΠΈΡΡΡ StackOverflowError (ΠΏΡΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ΅ ΡΡΠ΅ΠΊΠ°)?
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌ:
Π’ΠΎΡ ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ ΠΊΠΎΠ΄, ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ catch StackOverflowError.
ΠΠ° 64-Π±ΠΈΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΡΡΠ΅ΠΊΠ° 1 ΠΠ± ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²Π°ΡΡΠΈΡΡΠ΅ΡΡΡ ΠΎΡ 22 Π΄ΠΎ 35 ΡΡΡ. Π²ΡΠ·ΠΎΠ²ΠΎΠ². ΠΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊΠ°Ρ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°Π·Π½ΠΈΡΠ°? ΠΠ΅Π»ΠΎ Π² JIT: ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ java-ΠΊΠΎΠ΄Π°. Π ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ (ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠ΅ΡΠΎΠ΄ recursion Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΡΠΆΠ΅ Π²ΡΠ·Π²Π°Π»ΡΡ) Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°, Π° Π² ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ΅. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ·ΠΎΠ² ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅Ρ Π² ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄.
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Java 8, Ρ Π½Π°Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΉ VM Π΅ΡΡΡ 2 ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° β Β«Π»Π΅Π³ΠΊΠΈΠΉΒ» C1 ΠΈ Β«ΡΡΠΆΠ΅Π»ΡΠΉΒ» C2, Ρ.Π΅. Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π½Π° ΡΡΠ΅ΠΊΠ΅ ΠΎΠΊΠ°ΠΆΡΡΡΡ ΡΡΠ΅ΠΉΠΌΡ ΡΡΠ΅Ρ ΡΠΈΠΏΠΎΠ²: ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ C1 ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ C2. Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΉΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ. Π£ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° ΡΠ°ΠΌΡΠ΅ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠ΅ ΡΡΠ΅ΠΉΠΌΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²ΡΠ΅ Ρ ΡΠ°Π½ΠΈΡΡΡ Π½Π° ΡΡΠ΅ΠΊΠ΅ (Π²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π±Π°ΠΉΡΠΊΠΎΠ΄Π° ΠΈ Ρ.Π΄.). Π ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΈΠ· ΡΡΠΎΠ³ΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈ, ΡΠ΅ΠΌ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½Π΅Π΅ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΡΠ΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ Π½Π°Π΄ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ Π½Π° ΡΡΠ΅ΠΊΠ΅. C2, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π²ΠΎΠ΄ΠΈΡΡ ΠΌΠ΅ΡΡΠΎ Π½Π° ΡΡΠ΅ΠΊΠ΅ ΠΏΠΎΠ΄ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ β Π²ΡΠ΅ ΡΠ°ΡΠΏΠΈΡ Π°Π΅Ρ ΠΏΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌ, Π° Π΅ΡΠ΅ ΠΈ Π·Π°ΠΈΠ½Π»Π°ΠΉΠ½ΠΈΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΡΠΎΠ²Π΅Π½Ρ.
ΠΡΠ»ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΡ Π² ΡΠΈΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Ρ ΠΊΠ»ΡΡΠΈΠΊΠΎΠΌ
-Xint
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ β ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅Π³Π΄Π° 12500 (Β± Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅ΠΉΠΌΠΎΠ²).
Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π½ΠΎ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° C1.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π° 64-Π±ΠΈΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ° 1 ΠΠ±, Π½ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΡΠΈ 2 ΠΊΠ»ΡΡΠΈΠΊΠ° β ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΡ.
Thread(ThreadGroup, target, name, stackSize)
ΠΠΎ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΎΠ»ΡΡΠΈΡ ΡΡΠ΅ΠΊΠΎΠ² Π½Π΅Π»ΡΠ·Ρ Π·Π°Π±ΡΠ²Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΌΠ΅ΡΡΠΎ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΡΠΈΡΡΡΡ ΡΠ°ΠΊΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΡΡΠ΅ΠΊΠ° ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ out of memory:
ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ° Π½Π° 64-Π±ΠΈΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ β ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ 228 ΠΠ± (ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΎΡ Π²Π΅ΡΡΠΈΠΈ ΠΊ Π²Π΅ΡΡΠΈΠΈ JDK). ΠΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½ ΡΡΠ΅ΠΊ ΠΈ ΠΎΡΠΊΡΠ΄Π° ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ ΡΡΠΎΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ?
ΠΠ° ΡΡΠ΅ΠΊΠ΅, ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΡΠ΅ΠΉΠΌΠΎΠ² Π²Π°ΡΠΈΡ Java-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π΅ΡΡΡ Π΅ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. ΠΡΠΎ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π²ΡΠ΅Π³Π΄Π° 1 ΠΊΡΠ°ΡΠ½Π°Ρ Π·ΠΎΠ½Π° (ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Ρ 1 ΡΡΡΠ°Π½ΠΈΡΡ β 4 ΠΠ±) Π² ΡΠ°ΠΌΠΎΠΉ Π²Π΅ΡΡ ΡΡΠΊΠ΅ ΡΡΠ΅ΠΊΠ° ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ°Π½ΠΈΡ ΠΆΠ΅Π»ΡΠΎΠΉ Π·ΠΎΠ½Ρ.
ΠΡΠ°ΡΠ½Π°Ρ ΠΈ ΠΆΠ΅Π»ΡΠ°Ρ Π·ΠΎΠ½Ρ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ stack overflow. Π Π½Π°ΡΠ°Π»Π΅ ΠΎΠ±Π΅ Π·ΠΎΠ½Ρ Π·Π°ΡΠΈΡΠ΅Π½Ρ ΠΎΡ Π·Π°ΠΏΠΈΡΠΈ. ΠΠ°ΠΆΠ΄ΡΠΉ Java-ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠΏΡΡΠΊΡ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΡΠ΅ΠΊ-ΠΏΠΎΠΈΠ½ΡΠ΅ΡΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡΠ°ΡΠ½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΆΠ΅Π»ΡΠΎΠΉ Π·ΠΎΠ½Ρ (ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ). ΠΡΠΈ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΆΠ΅Π»ΡΠΎΠΉ Π·ΠΎΠ½Ρ ΠΎΠ½Π° ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ Ρ Π²Π°ΡΠΈΠ»ΠΎ ΠΌΠ΅ΡΡΠ° Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ stack overflow, ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ StackOverflowError ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π΅Π³ΠΎ Π΄Π°Π»ΡΡΠ΅. ΠΡΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΈ Π² ΠΊΡΠ°ΡΠ½ΡΡ Π·ΠΎΠ½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ unrecoverable error ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΡΠ°ΡΠ°Π»ΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ.
ΠΡΡΡ Π΅ΡΠ΅ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠ°Ρ shadow-Π·ΠΎΠ½Π°. Π£ Π½Π΅Π΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΡΠ°Π½Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ: Π½Π° Windows β 6 ΡΡΡΠ°Π½ΠΈΡ, Π½Π° Linux, Solaris ΠΈ ΠΏΡΠΎΡΠΈΡ ΠΠ‘ β 20 ΡΡΡΠ°Π½ΠΈΡ. ΠΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΡΠ΅ΡΡΡ Π΄Π»Ρ Π½Π°ΡΠΈΠ²Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π²Π½ΡΡΡΠΈ JDK ΠΈ Π½ΡΠΆΠ΄ ΡΠ°ΠΌΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ.
ΠΠΎΠ³Π΄Π° Ρ Π³ΠΎΡΠΎΠ²ΠΈΠ» ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡ, Π·Π°ΠΏΡΡΠΊΠ°Π» ΡΠ²ΠΎΠΉ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΡΠ΅ΡΡΠΈΠΊ ΠΈ Π½Π° Java 8, ΠΈ Π½Π° Java 9. ΠΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Ρ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠ°ΠΊΠΎΠΉ ΡΡΠ΄Π΅ΡΠ½ΡΠΉ ΠΊΡΠ°Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ (ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Π²ΡΠ²ΠΎΠ΄Π°):
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_STACK_OVERFLOW (0xc00000fd) at pc=0x0000019507acb5e0, pid=9048, tid=10544
#
# JRE version: Java(TM) SE Runtime Environment (9.0+119) (build 9-ea+119)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (9-ea+119, mixed mode, tiered, compressed oops, g1 gc, windows-amd64)
# Problematic frame:
# J 155 C2 demo4.Recursion.recursion()V (12 bytes) @ 0x0000019507acb5e0 [0x0000019507acb5e0+0x0000000000000000]
#
# No core dump will be written. Minidumps are not enabled by default on client versions of Windows
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
#
.
Π―, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠΊΠ°ΡΠ°Π» ΡΠ°ΠΌΡΠΉ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΈΠ· Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
Π±ΠΈΠ»Π΄ΠΎΠ² (Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π΄ΠΎΠΊΠ»Π°Π΄Π° ΡΡΠΎ Π±ΡΠ» 9.0+119), Π½Π° Π½Π΅ΠΌ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ.
ΠΡΠΎ ΠΎΡΠ΅Π½Ρ Ρ
ΠΎΡΠΎΡΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΡΠ°Ρ-Π΄Π°ΠΌΠΏΠ° (ΠΠ½Π΄ΡΠ΅ΠΉ ΠΠ°Π½ΡΠ³ΠΈΠ½ β ΠΠ½Π°Π»ΠΈΠ· Π°Π²Π°ΡΠΈΠΉΠ½ΡΡ
Π΄Π°ΠΌΠΏΠΎΠ² JVM). Π’ΡΡ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΠ»ΠΈΡΡ Π²ΡΠ΅ Π½Π°Π²ΡΠΊΠΈ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΡΠ΅ΠΊ-ΠΏΠΎΠΈΠ½ΡΠ΅ΡΠ°. ΠΡΠ°Ρ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π» ΠΊΠ°ΠΊ ΡΠ°Π· Π½Π° ΡΡΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ:
Instructions:
00000000: 89 84 24 00 a0 ff ff mov DWORD PTR [rsp-0x6000],eax
00000007: 55 push rbp
00000008: 48 83 ec 10 sub rsp,0x10
0000000c: 49 ba 78 71 88 8d 00 00 00 00 movabs r10,0x8d887178
00000016: 41 83 42 70 02 add DWORD PTR [r10+0x70],0x2
0000001b: e8 e0 ff ff ff call 0x00000000
Java Threads:
=>0x0000019571d71800 JavaThread «main» [_thread_in_Java, >
stack(0x0000007632e00000,0x0000007632f00000)]
0x0000007632e00ff8
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° RSP, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡ Π°Π΄ΡΠ΅Ρ, Π² ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ. ΠΡΠΆΠ½ΠΎ ΠΎΡΠ½ΡΡΡ 6000 Π² HEX ΠΎΡ ΡΡΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ°, ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
ΠΡ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΠΎ ΡΡΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π’Π°ΠΌ ΠΆΠ΅ Π² ΠΊΡΠ°Ρ-Π΄Π°ΠΌΠΏΠ΅ ΡΠΊΠ°Π·Π°Π½ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ ΡΡΠ΅ΠΊΠ° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°:
ΠΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π² ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΌΠΎΠΉ ΠΏΠ΅ΡΠ²ΠΎΠΉ (ΡΠ°ΠΌΠΎΠΉ Π²Π΅ΡΡ Π½Π΅ΠΉ) ΡΡΡΠ°Π½ΠΈΡΡ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ°, Ρ.Π΅. ΠΊΠ°ΠΊ ΡΠ°Π· Π² ΠΊΡΠ°ΡΠ½ΡΡ Π·ΠΎΠ½Ρ.
ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Π΅ΡΡΡ ΡΠ°ΠΊΠΎΠΉ Π±Π°Π³. Π― ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π» Π΅Π³ΠΎ ΠΈ Π½Π°ΡΠ΅Π» ΠΏΡΠΈΡΠΈΠ½Ρ: Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ JVM Π½Π΅ Ρ
Π²Π°ΡΠ°Π΅Ρ Π½Π° Windows Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
6 shadow-ΡΡΡΠ°Π½ΠΈΡ (ΠΎΠ½ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ). Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΠΎΠ±ΡΡΠΈΡΠ°Π»ΠΈΡΡ.
ΠΡΡΠ°ΡΠΈ, ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠΈΡ
Π·ΠΎΠ½ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ ΠΊΠ»ΡΡΠΈΠΊΠ°ΠΌΠΈ JVM.
ΠΠ°ΡΠ΅ΠΌ Π½Π°ΠΌ Π²ΠΎΠΎΠ±ΡΠ΅ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΡΡΠ΅ΠΊΠΈ? ΠΠ»Ρ Java EE, Π½Π΅ ΠΈΠ½Π°ΡΠ΅.
ΠΠΎΡ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΌΠΎΠΈΡ
Π»ΡΠ±ΠΈΠΌΡΡ
ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ Π½Π° ΡΡΡ ΡΠ΅ΠΌΡ.
ΠΠ° 2 ΡΡΡΠΎΡΠΊΠΈ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΡΡ ΡΠΎΡΠ½ΠΈ ΡΡΠ΅ΠΉΠΌΠΎΠ² ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² ΠΈ application-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ².
Π‘ΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠ°
ΠΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β Π½Π΅ΠΎΡΡΠ΅ΠΌΠ»Π΅ΠΌΠ°Ρ ΡΠ°ΡΡΡ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠ΅ ΠΏΡΠΎΡΠΈΠ»ΡΡΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π½Π° 2 Π±ΠΎΠ»ΡΡΠΈΠ΅ Π³ΡΡΠΏΠΏΡ: ΡΠ΅ΠΌΠΏΠ»ΠΈΡΡΡΡΠΈΠ΅ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠ΅.
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ: Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π² Π½Π°ΡΠ°Π»ΠΎ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎ Π²Ρ
ΠΎΠ΄Π΅ Π² ΠΌΠ΅ΡΠΎΠ΄, Π² ΠΊΠΎΠ½Π΅Ρ β ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎ Π²ΡΡ
ΠΎΠ΄Π΅ ΠΈΠ· Π½Π΅Π³ΠΎ. ΠΠΎΠ½ΡΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°ΠΊ ΠΏΡΠΎΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΡΠ΅ΠΌ, Π²ΡΠ΅ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±ΠΎΠ»ΡΡΠΎΠΉ overhead, Ρ
ΠΎΡΡ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΎΡΠ½ΡΠΌ.
Π ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΈΠ½ΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ β ΡΠ΅ΠΌΠΏΠ»ΠΈΡΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅Ρ. ΠΠ½ Ρ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎΡΡΡΡ (10-100 ΡΠ°Π· Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ) ΡΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π°ΠΌΠΏ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ ΡΠΌΠΎΡΡΠΈΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡΠ΅Π΄Ρ Ρ ΠΊΠ°ΠΊΠΈΠΌΠΈ ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ. ΠΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΡΡΠΈ ΡΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡΡ, ΠΈ ΡΠ²Π»ΡΡΡΡΡ Π³ΠΎΡΡΡΠΈΠΌΠΈ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ°Π·Ρ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π― Π½Π°ΠΏΠΈΡΠ°Π» Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΊΡ. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΎΠ½Π° ΠΌΠ°Π»Π΅Π½ΡΠΊΠ°Ρ, ΡΡ
ΠΎΠ΄Ρ ΠΈ Π½Π΅ ΡΠΊΠ°ΠΆΠ΅ΡΡ, ΡΡΠΎ Π² Π½Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡΠΌΠΎΠ·ΠΈΡΡ.
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, ΠΎΠ½Π° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ 2 ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠ΅ Π³Π΅ΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ. ΠΠΎΡΠΎΠΌ Π² ΡΠΈΠΊΠ»Π΅ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π΄ΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ (ΠΠΎΡΠΊΠ²Ρ) β Ρ.Π΅. Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ distanceTo, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ.
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ Π² Ρ
ΡΡ-ΠΌΠ°ΠΏ.
ΠΡΠ΅ ΡΡΠΎ Π² ΡΠΈΠΊΠ»Π΅ ΠΌΠ½ΠΎΠ³ΠΎ-ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π· Π±Π΅ΠΆΠΈΡ:
Π’ΡΡ Π²ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡΠΌΠΎΠ·ΠΈΡΡ: ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠΉ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ, ΠΈ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ (ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ), ΠΈ ΡΠ°ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ°ΠΏΠ΅. ΠΠ°Π²Π°ΠΉΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅Ρ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, Π½Π° ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΡ ΡΡΠ°ΡΠΈΡΡΡ Π²ΡΠ΅ΠΌΡ.
ΠΠΎΠ·ΡΠΌΡ Java VisualVM (Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΏΠΎΡΡΠ°Π²ΠΊΡ JDK β Π½ΠΈΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ Π½Π΅Ρ), Π½Π°Ρ ΠΎΠΆΡ Π½Π°Ρ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π° Π·Π°ΠΊΠ»Π°Π΄ΠΊΠ΅ Sampler, ΡΠ΅Π»ΠΊΠ°Π΅ΠΌ CPU β Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ (Π΄Π°Π΄ΠΈΠΌ ΠΏΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΠ» ΠΌΠΈΠ½ΡΡΡ). ΠΠ΅ΡΠΎΠ»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ β ΡΠ°Π· Π² 100 ΠΌΡ.
Π§ΡΡΡ ΠΌΠ΅Π½Π΅Π΅ ΡΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ (ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΏΡΠΎΡΠΈΠ»ΡΡΠΎΡΡ Java VisualVM) Π²ΡΠ΅ΠΌΡ Ρ Π½Π°Ρ ΡΡΠ°ΡΠΈΡΡΡ Π½Π° IdentiryHashMap.put.
ΠΡΠ»ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΠ»ΠΎΡΠΊΡΡ ΡΠ°Π±Π»ΠΈΡΠΊΡ ΠΏΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ, ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π² ΠΏΠΎ SelfTime:
ΠΠ°ΠΊ Π±ΡΠ΄ΡΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΈ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ.
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅ΡΠ°ΠΌΠΈ (JProfiler, YourKit ΠΈ Ρ.ΠΏ.), ΡΠ²Π΅ΡΡΡ Π²Π°Ρ, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅.
ΠΠ΅ΡΠΆΠ΅Π»ΠΈ HashMap Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΡΠΌΠΎΠ·Π½ΡΠ΅? ΠΠ΅Ρ. ΠΡΠΎΡΡΠΎ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅ΡΡ Π²ΡΡΡ.
Π£ΡΡΡΠΎΠ΅Π½Ρ ΠΎΠ½ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ: Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎΡΡΡΡ ΠΎΠ½ΠΈ ΡΠ΅ΡΠ΅Π· JMX ΠΈΠ»ΠΈ JVMTI Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΄Π°ΠΌΠΏ Π²ΡΠ΅Ρ
ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² JVMTI Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ GetAllStackTraces. Π’ΠΎ, ΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° Π³ΠΎΠ²ΠΎΡΠΈΡ, ΠΎΠ½ΠΈ Π·Π΄Π΅ΡΡ ΡΡΠΌΠΌΠΈΡΡΡΡ ΠΈ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ.
ΠΠΎΠ»ΠΎΠΆΠ° ΡΡΠΊΡ Π½Π° ΡΠ΅ΡΠ΄ΡΠ΅, ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅ΡΡ Π²ΡΡΡ, Π° JVM β ΠΎΠ½Π° Π΄Π°Π΅Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ ΡΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡΡ. Π£ Π²ΡΠ΅Ρ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅ΡΠΎΠ² Π΅ΡΡΡ ΠΎΠ΄Π½Π° Π±ΠΎΠ»ΡΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: ΡΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ½ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΌΠΎΠΌΠ΅Π½ΡΡ safepoint, Π° ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠΎΡΠΊΠΈ Π² ΠΊΠΎΠ΄Π΅, ΠΏΡΠΎ ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° Π·Π½Π°Π΅Ρ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ. Π ΡΠ°ΠΊΠΈΡ ΡΠΎΡΠ΅ΠΊ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ: ΠΎΠ½ΠΈ Π΅ΡΡΡ Π²Π½ΡΡΡΠΈ ΡΠΈΠΊΠ»ΠΎΠ² ΠΈ Π² ΡΠΎΡΠΊΠ°Ρ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΏΠΎΠ»ΠΎΡΠ½ΠΎ ΠΊΠΎΠ΄Π° β ΡΠΎΠΉ ΠΆΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ; Π±Π΅Π· ΡΠΈΠΊΠ»ΠΎΠ² β Π² Π½Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π±ΡΡΡ safepoint, Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΏΠΎΠ»ΠΎΡΠ½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π² ΡΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡΡ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ.
ΠΡΡΠ³Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΡΡ, ΠΈ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΡΡΠΌΠΏΠ»ΡΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, Ρ.ΠΊ. Ρ Π½Π°Ρ ΡΠ½ΠΈΠΌΠ°Π΅ΡΡΡ Π΄Π°ΠΌΠΏ ΡΠΎ Π²ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ, Ρ.ΠΊ. ΡΠΏΡΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π½Π°ΠΌ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ Π² ΡΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡΠ°Ρ .
Π’Π°ΠΊΠΆΠ΅ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅ΡΠΎΠ² Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΎΡΠ»ΠΈΡΠΈΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΡΡ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΌ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠΎΠΊΠ΅ΡΠ° ΠΏΠΎΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ RUNNABLE ΠΈ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊ Π΅ΡΡ 100% CPU. Π ΠΎΠ½ Π½Π΅ Π΅ΡΡ CPU, ΠΏΡΠΎΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅Π³ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°.
Π ΠΠ‘ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ Linux, ΡΠ°ΠΌ Π΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² setittimer, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π΄Π°Π΅Ρ ΡΠ°ΠΉΠΌΠ΅Ρ ΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎΡΡΡΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠΈΠ³Π½Π°Π» ΠΠ‘ (SIGPROF) Π΄Π»Ρ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎΠ»ΡΡΠ°ΡΡ Π΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΡ ΡΡΠ΅Π΄, ΠΊΠΎΡΠΎΡΡΠΉ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ. ΠΠ°ΠΌ Π±Ρ Ρ
ΠΎΡΠΎΡΠΎ ΡΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΠ‘ ΠΈ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΡΠΈΠ³Π½Π°Π»Π° SIGPROF ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΡΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ Π² safepoint. Π Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ HotSpot ΡΠ°ΠΊΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π°. ΠΡΡΡ Π½Π΅Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ API: AsyncGetCallTrace, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΡΠ΅ΠΊΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π΅ Π² safepoint.
ΠΡΠ° Π΄ΡΡΠΊΠ° Π±ΡΠ»Π° ΠΏΡΠΎΠΏΠΈΠ»Π΅Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ Oracle Developer Studio. ΠΡΠΎ ΡΡΡΡ Π»ΠΈ Π½Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠΈΠ»ΡΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ΅ΡΡΠ½ΡΠΉ ΡΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡ.
ΠΠΎΠΊΠ° Π³ΠΎΡΠΎΠ²ΠΈΠ» ΡΡΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄, Ρ ΡΠΌΠΎΡΡΠ΅Π», Π° Π΅ΡΡΡ Π»ΠΈ ΠΊΡΠΎ-ΡΠΎ Π΅ΡΠ΅, ΠΊΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ. ΠΠ°ΡΠ΅Π» Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ 2 ΠΏΡΠΎΠ΅ΠΊΡΠ°: ΠΎΠ΄ΠΈΠ½ β ΡΡΠ°ΡΡΠΉ ΠΈ ΡΠΆΠ΅ Π·Π°Π±ΡΠΎΡΠ΅Π½Π½ΡΠΉ, Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π΄Π°Π²Π½ΠΎ (Π² 2015 Π³ΠΎΠ΄Ρ) ΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ honest-profiler.
API Π·Π΄Π΅ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ: ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΡΠΎ, ΠΊΡΠ΄Π° Π±ΡΠ΄Π΅ΠΌ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ ΡΡΠ΅ΠΊ, ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄:
Π’ΡΠ΅ΡΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΊ Π½Π°ΠΌ Π² signal handler.
Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΠΌΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ open source ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅Ρ: https://github.com/apangin/async-profiler. ΠΠ΅ΡΠΈΡΠ΅ β ΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ. Π‘Π΅ΠΉΡΠ°Ρ ΠΎΠ½ ΡΠΆΠ΅ Π² ΡΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π½Π΅ ΡΡΡΠ΄Π½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π»ΡΠ΄ΡΠΌ. ΠΡΠ°Π²Π΄Π°, ΡΠ΅ΠΉΡΠ°Ρ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Linux (ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° macOS).
ΠΡΠΎΠ²Π΅ΡΠΈΠΌ Π½Π° ΡΠΎΠΌ ΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅.
ΠΠΎΠ²ΠΎΡΠΈΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΡΠ΅ΠΌ.
ΠΠ°Ρ pid β 3202.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅ΡΠ° (ΠΊΠΎΡΠΎΡΡΡ Ρ Π΅ΡΠ΅ Π½ΠΈ Ρ ΠΊΠΎΠ³ΠΎ Π½Π΅ Π²ΠΈΠ΄Π΅Π») Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π½Π° Π»Π΅ΡΡ (ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠΉ honest-profiler Π½Π°Π΄ΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Java-Π°Π³Π΅Π½ΡΠ° ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ).
ΠΠ°Π΄ΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄ Π½Π° ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠΎΡ ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅:
Π ΠΊΠΎΠ½ΡΠ΅ β ΠΏΠ»ΠΎΡΠΊΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²; ΡΡΡΡ Π²ΡΡΠ΅ β ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ (Π²ΡΠ΅ ΡΡΠ΅ΠΊΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²). ΠΠ°ΡΡΠΈΠ½Π° ΠΊΠ°ΡΠ΄ΠΈΠ½Π°Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ. Π§ΡΡΡ Π»ΠΈ Π½Π΅ ΡΡΠ΅ΡΡ Π²ΡΠ΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡ
ΠΎΠ΄ΠΈΡ Π½Π° ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΡ β Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ. IdentityHashMap.put β Π²ΠΎΠΎΠ±ΡΠ΅ Π²Π½ΠΈΠ·Ρ Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ 2% (ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅ΡΡ ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π» 100%). Π ΡΠ΅Π°Π»ΡΠ½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ identityHashCode ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π Π½Π΅ΠΌΠ°Π»ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡ
ΠΎΠ΄ΠΈΡ Π½Π° ΡΠ°ΠΌ put ΠΈ resize. Π ΡΠ»ΠΎΠ²Ρ, Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠΉ Π»ΠΎΠΊΠ°ΡΠΈΠΈ ΡΠΎΠΆΠ΅ Π½Π΅ Π±Π΅ΡΠΏΠ»Π°ΡΠ½Π° (ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ 12%).
ΠΠΎΡΡΠ²ΡΡΠ²ΡΠΉΡΠ΅ ΡΠ°Π·Π½ΠΈΡΡ.
ΠΠ°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅ΡΠ° Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΌΠ΅Π½ΡΡΠ΅. ΠΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Ρ ΠΎΡΡ 1000 ΡΠ°Π· Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΠΈ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΡΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡ ΡΠΎΠ»ΡΠΊΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°. Π ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΎΠ½ Π² ΠΎΡΠ΅Π½Ρ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΡ β ΠΎΠ½ Π½Π΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π²ΡΠ΅ ΡΡΠΈ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡΠΎ Π²ΡΠ΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠΊΠ΅. Π Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ jmethodID (ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Ρ).
ΠΠ°ΠΌΠΏΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²
ΠΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² Π΄Π΅Π»Π°ΡΡ Π΄Π°ΠΌΠΏΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²: ΠΈΠ· Java ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΈΠ· Π½Π°ΡΠΈΠ²Π°, ΠΈΠ·Π½ΡΡΡΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ»ΠΈ ΡΠ½Π°ΡΡΠΆΠΈ.
ΠΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎΠ± Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ·Π½ΡΡΡΠΈ, ΡΠΎ Π΅ΡΡΡ Java API getAllStackTraces, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ΄Π°Π΅Ρ Π½Π°ΠΌ ΠΌΠ°ΡΡΠΈΠ² StackTraceElement ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π²ΡΡΠ΅ΠΊΠ°ΡΡΠΈΠΌΠΈ.
ΠΠΎΠ³Π΄Π° ΠΌΡ Π½Π° ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅ ΠΏΡΡΠ°Π»ΠΈΡΡ ΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, Π΄Π»Ρ ΡΠ»ΡΡΠ°Ρ Ρ 2 ΡΡΡΡΡΠ°ΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ², Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
Π³Π»ΡΠ±ΠΈΠ½Π° ΡΡΠ΅ΠΊΠ° 50-60 ΡΡΠ΅ΠΉΠΌΠΎΠ², ΠΎΠ΄ΠΈΠ½ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΡ ΠΌΠ°ΡΡΠΈΠ² Π·Π°Π½ΠΈΠΌΠ°Π» ΠΏΠΎΡΡΠ΄ΠΊΠ° 50 ΠΠ±.
ΠΡΡΡ ΠΏΠΎΡ
ΠΎΠΆΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ Ρ JMX (ΠΎΠ½ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΡΠ΅ΠΌ, ΡΡΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΡΠ³Π°ΡΡ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎ). ΠΠ½ Π²ΡΠ΄Π°Π΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ ΠΌΠ°ΡΡΠΈΠ² StackTraceElement, Π° Π²Π΄ΠΎΠ±Π°Π²ΠΎΠΊ Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π·Π°Ρ
Π²Π°ΡΠ΅Π½Π½ΡΡ
ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°Ρ
.
ΠΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡΠΎΠ² ΠΈΠ· ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»ΡΡΡΠ΅ ΡΠΏΠΎΡΠΎΠ± β JVMTI (Tool Interface) β Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠ², Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ² ΠΈ Ρ.Π΄.
ΠΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ GetAllStackTraces, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΊΠ°ΠΊ ΡΠ°Π· ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅ΡΡ. ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Java API Ρ Π½Π΅Π³ΠΎ ΠΎΡΠ΅Π½Ρ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡΡ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΠ°ΠΌΠ° Java ΠΌΠ°ΡΠΈΠ½Π°. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΡΡ. ΠΡΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ safepoint, Π½ΠΎ Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ
ΡΡΡΡΠΊΡΡΡ.
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΏΡΡΡ β ΡΡΠΈΠ»ΠΈΡΠ° jstack. ΠΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ dynamic attach (Π½Π° Π½Π΅ΠΉ Ρ ΠΎΡΡΠ°Π½ΠΎΠ²Π»ΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅).
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ UNIX socket ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ, ΡΡΠΈΠ»ΠΈΡΠ° ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΈ ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°ΠΌΠ° Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π°, Π° ΠΎΡΠ²Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ»Π°Π΅Ρ Π½Π°Π·Π°Π΄ ΡΡΠΈΠ»ΠΈΡΠ΅ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΆΠ΅ ΡΠΎΠΊΠ΅ΡΡ.
Π Window Π²ΡΠ΅ ΡΡΡΡΠΎΠ΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ-Π΄ΡΡΠ³ΠΎΠΌΡ (Π½Π΅ Π·Π½Π°Ρ, ΠΏΠΎΡΠ΅ΠΌΡ Π½Π΅Π»ΡΠ·Ρ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ ΠΆΠ΅; Π² Windows Π½Π΅Ρ ΡΠ°Π·Π²Π΅ ΡΡΠΎ UNIX-ΡΠΎΠΊΠ΅ΡΠΎΠ², Π·Π°ΡΠΎ Π΅ΡΡΡ named pipes) β Π΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΡΠ°ΡΠΈΠ²ΡΠΉ API, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅ ΠΌΠΎΠ³ Π½Π΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ Π΅Π³ΠΎ Π·Π΄Π΅ΡΡ.
ΠΠ°ΡΠ°Π»ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ β ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ named pipe. ΠΠ°Π»Π΅Π΅ Π² Windows API Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ WriteProcessMemory, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π°ΠΏΡΡΠΌΡΡ Π² ΠΏΠ°ΠΌΡΡΡ ΡΡΠΆΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π΅ΡΠ»ΠΈ Ρ Π½Π΅Π΅ Π΅ΡΡΡ Π½Π° ΡΡΠΎ ΠΏΡΠ°Π²Π°. Π§Π΅ΡΠ΅Π· ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΏΠ°ΠΌΡΡΠΈ Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ java-ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΡΠ΄Π° Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ, Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ pipe, ΠΊΡΠ΄Π° ΠΏΠΎΠΉΠ΄Π΅Ρ ΠΎΡΠ²Π΅Ρ. ΠΡΠ΅ ΠΎΠ΄Π½Π° Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΡΡΠ΄Π΅ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π½Π΅Π΄ΡΠΈΡΡ Π² ΡΡΠΆΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠ΅Π΄ β CreateRemoteThread. Π£ΡΠΈΠ»ΠΈΡΠ° jstack Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ β ΠΎΠ½ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΆΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. Π Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠΎΠΌΡ ΡΡΠ΅Π΄Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ, Π³Π΄Π΅ Π΅ΡΡΡ Π²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅.
ΠΠ°Π»Π΅Π΅ Π²ΡΠ΅ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅: JVM ΡΠ°ΠΌΠ° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π°Π·Π°Π΄.
ΠΠ»ΡΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°:
ΠΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
ΠΡΠΎ Π΄Π°ΠΌΠΏ ΡΡΠ΅Π΄ΠΎΠ², Π΄Π°ΠΌΠΏ Ρ ΠΈΠΏΠ°, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΈΠΏΠ°, ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠΊΠ° ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ»Π°Π³ΠΎΠ² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΌΠ΅Π΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠΈΠ»ΠΈΡΠ° jcmd, ΠΈ load β Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, ΡΠ°ΠΌΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ JVMTI-Π°Π³Π΅Π½ΡΠ° Π² ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ load ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΌΠΎΠΉ async ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅Ρ (Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΡΠ²ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π² ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ JVM).
ΠΡΠ°ΡΠΊΠΎ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠ°ΠΏΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡ, Π΄ΠΎΠΏΡΡΡΠΈΠΌ, tomcat.
pid ΠΏΡΠΎΡΠ΅ΡΡΠ° β 8856.
ΠΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π²ΡΠ΄Π°Π΅ΡΡΡ ΡΠΎΡ ΡΠ°ΠΌΡΠΉ Π΄Π°ΠΌΠΏ ΠΏΠΎΡΠΎΠΊΠ°. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ Π½Π΅ java-ΡΡΠΈΠ»ΠΈΡΠ°, Π° Π‘, Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π½Π° Π·Π°ΠΏΡΡΠΊ Java. Π£ΡΠΈΠ»ΠΈΡΠΊΠ° ΠΎΡΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΊΠ°Ρ β Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ 100 ΡΡΡΠΎΡΠ΅ΠΊ Π΄Π»Ρ Windows ΠΈ Π΄Π»Ρ Linux. ΠΠΎΡΡΡΠΏΠ½ΠΎ Π½Π° GitHub.
Π§Π΅ΡΠ΅Π· ΡΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΈΠ»ΠΈΡΠ° jstack, Π½ΠΎ ΠΈ ΡΡΠΈΠ»ΠΈΡΡ jmap, jinfo ΠΈ jcmd (ΠΏΠΎ ΡΡΡΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΉ jattach ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠ»Ρ Π²ΡΠ΅Ρ ΡΡΠΈΡ ΡΡΠΈΠ»ΠΈΡ).
ΠΠ° Linux ΡΠ΅ΡΠ΅Π· ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² PTRACE_ATTACH (Π½Π° Windows Π΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ) ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ, Π·Π°ΠΌΠΎΡΠ°ΠΆΠΈΠ²Π°Ρ Π΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. ΠΠ°Π»ΡΡΠ΅ ΡΠ΅ΡΠ΅Π· Π΄Π΅Π±Π°ΠΆΠ½ΡΠΉ API, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΈΡΠ°ΡΡ ΠΏΠ°ΠΌΡΡΡ Ρ ΡΡΠΆΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΡΠΈΠ»ΠΈΡΠ° jstack Π²ΡΡΠ°ΡΠΊΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ, ΠΈΠ· ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ JVM ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ°Π»Π΅Π΅ Ρ ΡΠ΅Π±Ρ ΡΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΈΡΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ JVM ΠΈ ΠΏΡΠΎΠ±Π΅Π³Π°Π΅Ρ ΠΏΠΎ Π½ΠΈΠΌ, ΡΠ°ΠΌΠ° Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΡΠ΅ΠΊ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ PTRACE_PEEKDATA Π·Π° 1 ΡΠ°Π· ΠΈΠ· ΡΡΠΆΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ 1 ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ, Π΅ΡΠ»ΠΈ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ Π±ΠΎΠ»ΡΡΠΎΠΉ Ρ ΠΈΠΏ, ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² (ΡΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΠΎΡΠ΅Π½Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ).
ΠΠ»Ρ ΡΠ΅Π³ΠΎ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ? ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΠ²Π΅Ρ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ ΡΠΎΡΠΌΠΎΠ·ΠΈΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΠΎΠ³Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅ΡΠ΅ΠΊΡΠΈΡ ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΡΠ΅ΡΠΏΠ°Π»ΡΡ thread pool), Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π΄Π°ΠΌΠΏ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΡΠΎΠ±Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π² Π»ΠΎΠ³Π°Ρ ΠΌΠΎΠ³ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΆΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ° Π΄Π΅Π»Π°Π»Π° Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΡΡΠΎ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π°ΡΡΠΏΠΈΠ»ΠΎ.
ΠΡ Ρ ΡΠ΅Π±Ρ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΡΠ°Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Java API Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΎΡΠ΅Π½Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π»ΠΎ ΠΊΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· Dynamic Attach β Π΅ΡΡΡ ΠΊ Π½Π΅ΠΌΡ Java API, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠ°ΠΊ ΡΠ°Π· ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΡΠΈΠ»ΠΈΡΠ° jstack. ΠΡ ΡΠ·Π½Π°Π΅ΠΌ pid ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΡΠ°ΠΌΠΈ ΠΊ ΡΠ΅Π±Π΅ ΡΠ΅ΡΠ΅Π· Dynamic Attach ΠΈ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ ΡΠ°ΠΌΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π°ΠΌ Π΄Π°ΠΌΠΏ.
Π₯ΠΈΠΏ-Π΄Π°ΠΌΠΏΡ
Π£ΡΠΈΠ»ΠΈΡΠ° jmap Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΡΡΡΡΠΎΠ΅Π½Π° ΡΠ°ΠΊ ΠΆΠ΅.
ΠΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΠΏΡΠΎΠ±Π΅Π³Π°Π΅Ρ ΠΏΠΎ Ρ ΠΈΠΏΡ ΠΈ ΡΡΠΈΡΠ°Π΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΠΌΡΡΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΠ°Π»Π΅Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΠ· ΡΡΠΎΠΉ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΌΡΡΠΎΡΡΡ Π² Ρ ΠΈΠΏΠ΅.
Π£ jmap ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ 2 ΡΠ΅ΠΆΠΈΠΌΠ° ΡΠ°Π±ΠΎΡΡ: ΡΠ΅ΡΠ΅Π· Dynamic Attach ΠΈ ΡΠ΅ΡΠ΅Π· Serviceability Agent (Ρ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ ΠΏΠ»ΡΡΠ°ΠΌΠΈ ΠΈ ΠΌΠΈΠ½ΡΡΠ°ΠΌΠΈ).
Π ΡΡΠ°ΡΡΡΡ, Π΅ΡΡΡ Ρ ΠΈΡΡΡΠΉ ΡΠΏΠΎΡΠΎΠ±, ΠΊΠ°ΠΊ Π±ΡΡΡΡΠΎ ΡΠ½ΠΈΠΌΠ°ΡΡ Π΄Π°ΠΌΠΏΡ Ρ ΠΌΠ΅ΡΡΠ²ΡΡ ΠΈΠ»ΠΈ Π·Π°Π²ΠΈΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π² forced-ΡΠ΅ΠΆΠΈΠΌΠ΅.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅.
Π£ ΠΌΠ΅Π½Ρ Π·Π°ΠΏΡΡΠ΅Π½ tomcat Ρ pid 2362. ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ½ΡΡΡ jmap Π² forced-ΡΠ΅ΠΆΠΈΠΌΠ΅:
ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π΄ΠΎΠ»Π³ΠΎ. ΠΠ΄Π΅ΠΌ ΠΏΠ°ΡΡ ΠΌΠΈΠ½ΡΡ ΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΠΌ. Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ, Π΅ΡΠ»ΠΈ Ρ Π²ΡΠ·ΠΎΠ²Ρ gcore, core dump ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π·Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΠ°Π½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ½ 227 ΠΠ±.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π°Π»ΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ: Π²Π°ΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ tomcat Π½Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π» ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
ΠΠ°Π»ΡΡΠ΅ jmap ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΠ°Π²ΠΈΡΡ Π½Π° ΡΡΠΎΡ core-ΡΠ°ΠΉΠ».
Π ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ-ΡΠΎ ΠΏΠΎΡΠ»ΠΎ ΠΏΠ»ΠΎΡ ΠΎ, Ρ ΠΎΡΠ΅ΡΡΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΈΠΏ-Π΄Π°ΠΌΠΏ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΠΎΠΏΡΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ:
-XX:+HeapDumpOnOutOfMemoryError
ΠΠ½Π° ΠΏΠΎΠ»Π΅Π·Π½Π° Π΄Π»Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ β ΠΊΠΎΠ³Π΄Π° Ρ Π²Π°Ρ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ out of memory. Π‘Π±ΠΎΡΠΊΠΈ GC ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ, Π»ΡΡΡΠ΅ ΡΡΠ°Π·Ρ ΡΠ΄Π°ΠΌΠΏΠΈΡΡ Ρ ΠΈΠΏ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΡΠ΅ΡΡΠ°ΡΡΠ°Π½ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΌΠΏΠΈΡΡ Ρ ΠΈΠΏ Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ ΠΌΡΡΠΎΡΠ°:
ΠΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΏΡΡΡ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, ΠΊΡΠ΄Π° ΡΡΠΎ Π²ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΎΠΆΠ΅Π½ΠΎ.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΡΠΎ Π²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ manageable, Ρ.Π΅. Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΈ Π²ΡΠΊΠ»ΡΡΠ°ΡΡ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΡΠΌΠΎ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅, Π»ΠΈΠ±ΠΎ ΡΠ½Π°ΡΡΠΆΠΈ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρ jinfo, Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· JMX-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
Π Java 8 update 92 ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π΅ΡΠ΅ 2 Π½ΠΎΠ²ΡΡ ΠΎΠΏΡΠΈΠΈ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Ρ ΠΈΠΏ-Π΄Π°ΠΌΠΏΠΎΠ² (ΠΊΠ°ΠΊ ΡΠ°Π· ΡΡΠΎΠ±Ρ downtime Π±ΡΠ» ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅):
Π§Π΅ΡΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΠΎΠΏΡΠΈΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π±Π΅Π· Π½ΠΈΡ Π±ΡΠ»ΠΎ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡΡΡΡ. ΠΠΈΡΡΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π»ΠΎ Π·Π°Π΄Π°ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠΈΠ΅ 2 ΠΎΠΏΡΠΈΠΈ (ΡΠ΄Π°ΠΌΠΏΠΈΡΡ Ρ ΠΈΠΏ Π½Π° out of memory ΠΈ ΠΏΠΎΡΠΎΠΌ ΠΏΡΠΈΠ±ΠΈΡΡ ΡΡΠΎ ΠΆΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅):
ΠΠ°ΠΊΠΈΠ΅ Π΅ΡΡΡ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°ΠΌΠΏ Ρ ΠΈΠΏΠ°?
ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΠ· java, ΠΈΠ· native, ΠΈΠ·Π½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΠ½Π°ΡΡΠΆΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
ΠΠ·Π½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ΅Π· ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ MXBean:
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΠ½Π°ΡΡΠΆΠΈ ΡΠΎΡΡΠΈΡ JMX remote interface, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅ΡΠ΅Π· Π½Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΈ Π½Π° ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°ΠΌΠΏ Ρ
ΠΈΠΏΠ°.
ΠΠ°ΠΆΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ: jmap ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²ΡΠ΅Π³Π΄Π° ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, ΠΏΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ ssh ΠΊ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½-ΡΠ΅ΡΠ²Π΅ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π°ΠΌΠΏΠΈΡΡ Ρ
ΠΈΠΏ, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π΅Π³ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ β ΡΠ΅ΡΠ΅Π· JMX remote interface.
ΠΡΡΡΡΠ΅Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎ ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ΅ ΡΠΎΡ ΠΆΠ΅ JVMTI. ΠΡΡΡ ΡΠ°ΠΊΠ°Ρ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ IterateOverInstancesOfClass.
ΠΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π·Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π½Π°ΠΉΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π²Π°ΠΌ ΡΠΈΠΏΠ°, Π° Ρ ΠΈΠΏ Ρ Π²Π°Ρ Π½Π° 16 ΠΠ±.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π½ΡΠΆΠ½ΠΎ Π² Π΄Π²Π° ΡΡΠ°ΠΏΠ°. Π‘Π½Π°ΡΠ°Π»Π° ΡΠ°ΠΌΠ° ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ, Π½ΠΎ Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ. Π ΡΠΆΠ΅ Π·Π°ΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ GetObjectsWithTags ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΠΌΠ°ΡΡΠΈΠ² jobject.
ΠΠΎΡ Π»ΡΠ±ΠΈΠΌΠ°Ρ ΡΠ΅ΠΌΠ° β ΡΡΠΎ serviceability agent β API, ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΡΡΡ Π² HotSpot. ΠΠ½ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² JDK ΠΈ JVM, Π½ΠΎ Π½Π°ΡΠ΅Π» ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ Ρ ΠΏΡΠΎΡΡΡΡ Java-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ².
Π Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ Java Π΅ΡΡΡ ΡΠ°ΠΉΠ»ΠΈΠΊ sa-jdi.jar β ΡΡΠΎ ΠΊΠ°ΠΊ ΡΠ°Π· API serviceability agent. ΠΠ½ Π·Π½Π°Π΅Ρ Π²ΡΠ΅ ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΎΡΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ: ΠΊΠ°ΠΊΠΈΠ΅ Π΅ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ JVM, ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ ΠΎΡΡΡΠ΅ΡΠ°ΠΌ ΡΡΠΎ Π»Π΅ΠΆΠΈΡ, ΠΈ Π΅ΡΡΡ Java API, ΡΡΠΎΠ±Ρ ΡΡΠΈΠΌ Π²ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ VM ΠΈ ΠΎΠ±ΠΎΠΉΡΠΈ Ρ ΠΈΠΏ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅.
ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ Π²Ρ β Ρ
Π°ΠΊΠ΅Ρ, ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΡΠΎΡΠΊΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ. ΠΡ Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΡΡΠ΄Π° ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠ΅ ΠΊΠ»ΡΡΠΈ. ΠΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ Π΄Π°ΠΌΠΏΠΈΡΡ Ρ
ΠΈΠΏ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ Π·Π°ΠΌΠ΅ΡΡΡ, Ρ.ΠΊ. ΡΡΡ ΠΆΠ΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΠΏΡΠΎΡΡΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π Ρ ΠΏΠΎΠΌΠΎΡΡΡ serviceability agent ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈ Π² Ρ
ΠΈΠΏΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½ΡΠΆΠ½ΡΡ
ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΠΈΡ
.
API ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠΉ.
Π£ΠΆΠ΅ Π·Π°Π³ΠΎΡΠΎΠ²Π»Π΅Π½ Π²Π΅ΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ (Π² Π²ΠΈΠ΄Π΅ ΠΊΠ»Π°ΡΡΠ° Tool), ΠΈ ΡΡΠΈΠ»ΠΈΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΎΡΡΠΎ Π·Π°ΡΠΊΡΡΠ΅Π½Π΄ΠΈΡΡ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ ΠΈ Π²ΡΠ·Π²Π°ΡΡ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ execute Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ (Π΄Π°ΠΆΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΆΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π° Π²Π°Ρ). ΠΡΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ run ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ.
ΠΡΠΎ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ serviceability agent, ΠΊΠΎΠ³Π΄Π° ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΡΡΠ΅Π½ΠΈΡ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΈΠ»ΠΈΡΡ Ρ Java-ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ. ΠΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΡΡΠΈΠ»ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ° ΠΏΡΠΎΡΠ΅ΡΡΠ° Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ.
ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π°Ρ tomcat ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
Π§Π΅ΡΠ΅Π· ΠΏΠ°ΡΡ ΡΠ΅ΠΊΡΠ½Π΄ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ ΠΈΠΏΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ β ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°Π»ΠΈΡΡ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡΡ Π² Ρ ΠΈΠΏΠ΅.
Π―, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡ ΠΈΡΡΠΈΠ». Print Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΏΠ»ΠΎΡΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π° ΡΠ°ΠΌ ΠΊΠ»ΡΡΠΈΠΊ Π²Π½ΡΡΡΠΈ ΡΡΠΎΠ³ΠΎ Π±Π°ΠΉΡΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΠΎΡΡΠΎΠΌΡ Π½ΡΠΆΠ½ΠΎ Π΅ΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ ΠΏΠΎΠ»Π΅. Π£ ΠΌΠ΅Π½Ρ Π½Π° ΡΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ Π·Π°Π³ΠΎΡΠΎΠ²Π»Π΅Π½ ΠΊΠ»Π°ΡΡ FieldPrinter, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π²ΠΈΠΆΠ΅ΡΡΡ ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈ, Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ ΠΈΠΌΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ fieldName, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π΅Π³ΠΎ Π² Π±Π°ΠΉΡΠΎΠ²ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΈ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΡΠ²Π°Π΅Ρ.
ΠΠ° Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠΌΠ΅Π΅ΠΌ Π² ΡΠΈΡΡΠΎΠΌ Π²ΠΈΠ΄Π΅ private key Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°.
Π£ serviceability agent Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΡΠΊΠΈΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π»ΡΠ±ΡΠΌ Π΄ΡΡΠ³ΠΈΠΌ API Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠΎΠΉ ΡΠΊΠ·ΠΎΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ: Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈ Π½Π΅ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅, ΡΡΠΎ Π² oldGen. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ serviceability agent Π²ΡΠ΅ Π·Π½Π°Π΅Ρ ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ
ΡΡΡΡΠΊΡΡΡΠ°Ρ
, Ρ Π½Π΅Π³ΠΎ Π΅ΡΡΡ Π΄Π°ΠΆΠ΅ ΡΠ°ΠΊΠΎΠΉ API. ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Ρ
ΠΈΠΏΠ° Π² ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Java-ΠΌΠ°ΡΠΈΠ½Π΅ ΠΈ Ρ Π½Π΅Π³ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ oldGen, ΠΎΠΏΡΡΡ ΠΆΠ΅ ΡΡΠΈΠΌ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠΉΡΠΈΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π±Π΅ΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π² oldGen, ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΅Π³ΠΎ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ.
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°Ρ Π²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ tomcat, ΠΊΠΎΡΠΎΡΡΠ΅ Π»Π΅ΠΆΠ°Ρ Π² oldGen:
ΠΠΈΡΠ½ΠΎ Π²ΡΡΡΠ΅ΡΠΈΡΡΡΡ Ρ ΠΠ½Π΄ΡΠ΅Π΅ΠΌ Π² ΠΠΎΡΠΊΠ²Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΆΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠΊΠΎΡΠΎ β 7-8 Π°ΠΏΡΠ΅Π»Ρ Π½Π° JPoint 2017. Π ΡΡΠΎΡ ΡΠ°Π· ΠΎΠ½ Π²ΡΡΡΡΠΏΠΈΡ Ρ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠΌ Β«JVM-ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅Ρ Ρ ΡΡΠ²ΡΡΠ²ΠΎΠΌ ΡΠ°ΠΊΡΠ°Β», Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅Ρ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΡΠ½ΡΠ΅ Π·Π°ΠΌΠ΅ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² ΠΊ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎΠΊΠ»Π°Π΄ Π±ΡΠ΄Π΅Ρ Β«Π²ΡΠ΅Π³ΠΎΒ» ΡΠ°ΡΠΎΠ²ΠΎΠΉ, Π·Π°ΡΠΎ Π² Π΄ΠΈΡΠΊΡΡΡΠΈΠΎΠ½Π½ΠΎΠΉ Π·ΠΎΠ½Π΅ Π½ΠΈΠΊΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ Π²Π°Ρ ΠΎΡ Π²ΠΎΠΏΡΠΎΡΠΎΠ² ΠΈ Π³ΠΎΡΡΡΠΈΡ ΡΠΏΠΎΡΠΎΠ²!
ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ, Π½Π° JPoint Π΅ΡΡΡ ΡΠ΅Π»Π°Ρ ΠΊΡΡΠ° ΠΊΡΡΡΡΡ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±ΠΎ Π²ΡΠ΅ΠΌ ΠΈΠ· ΠΌΠΈΡΠ° Java β ΠΎΠ±Π·ΠΎΡ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΠΌΡΡ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² ΠΌΡ Π΄Π°Π²Π°Π»ΠΈ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΏΠΎΡΡΠ΅, Π° ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π½Π° ΡΠ°ΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΡ.