Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄Π°ΠΌΠΏΠΈΡ‚ΡŒ ΠΈΠ³Ρ€Ρ‹

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄Π°ΠΌΠΏΠΈΡ‚ΡŒ ΠΈΠ³Ρ€Ρ‹

Π’ связи с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ Ρƒ всСх Π΅ΡΡ‚ΡŒ высокоскоростной ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚, Π° Ρ‡Π΅Ρ€Π΅Π· Π΄ΠΈΠ°Π»-Π°ΠΏ скачиваниС ΠΈΠ³Ρ€Ρ‹ Π²Π»Π΅Ρ‚Π°Π΅Ρ‚ Π² ΠΊΠΎΠΏΠ΅Π΅Ρ‡ΠΊΡƒ,
я Ρ€Π΅ΡˆΠΈΠ», Ρ‡Ρ‚ΠΎ цСлСсообразно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ сСй Ρ„Π°ΠΊ ΠΏΠΎ созданию 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 β€” ΠΎΠ±Π·ΠΎΡ€ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² ΠΌΡ‹ Π΄Π°Π²Π°Π»ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ постС, Π° просто ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° сайтС мСроприятия.

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

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

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