JavaRush/Java Π±Π»ΠΎΠ³/Random/ΠšΠΎΡ„Π΅-Π±Ρ€Π΅ΠΉΠΊ #264. Π£Ρ‚Π΅Ρ‡ΠΊΠΈ памяти Java: ΠΊΠ°ΠΊ ΠΈΡ… ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΈ ...

ΠšΠΎΡ„Π΅-Π±Ρ€Π΅ΠΉΠΊ #264. Π£Ρ‚Π΅Ρ‡ΠΊΠΈ памяти Java: ΠΊΠ°ΠΊ ΠΈΡ… ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏΡ‹ Random
участников
Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: Medium Π”Π°Π½Π½ΠΎΠ΅ руководство ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π² Π½ΡŽΠ°Π½ΡΡ‹ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Java, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡ… обнаруТСния ΠΈ стратСгии прСдотвращСния. ΠšΠΎΡ„Π΅-Π±Ρ€Π΅ΠΉΠΊ #264. Π£Ρ‚Π΅Ρ‡ΠΊΠΈ памяти Java: ΠΊΠ°ΠΊ ΠΈΡ… ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ - 1НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Java имССтся надСТная автоматичСская сборка мусора, ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти всС Π΅Ρ‰Π΅ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ слоТной ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Π’Π°ΠΊΠΈΠ΅ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ происходят, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, Π½ΠΎ Π½Π° Π½ΠΈΡ… всС Π΅Ρ‰Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈ это Π½Π΅ позволяСт сборщику мусора ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΡƒΡ‚Π΅Ρ‡ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ сниТСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ прилоТСния ΠΈ Π΄Π°ΠΆΠ΅ ΠΊ Π΅Π³ΠΎ сбою ΠΈΠ·-Π·Π° ошибки OutOfMemoryError.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти Π² Java

Π£Ρ‚Π΅Ρ‡ΠΊΠΈ памяти Π² Java β€” языкС, извСстном своСй автоматичСской сборкой мусора, Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π½Π΅ΠΌΠ°Π»ΠΎ Ρ…Π»ΠΎΠΏΠΎΡ‚. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ языков, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ осущСствляСтся самим программистом, Java Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ своСго сборщика мусора. ΠŸΡ€ΠΈ этом Π²Π°ΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ такая автоматизация ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ освобоТдаСт Java-прилоТСния ΠΎΡ‚ риска ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти. Π£Ρ‚Π΅Ρ‡ΠΊΠ° памяти β€” это ситуация, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² памяти, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π° Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ссылки Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ сборщик мусора Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ это пространство.

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти

ПониманиС ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π² Java β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ шаг ΠΊ ΠΈΡ… ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡŽ. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ распространСнныС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ появлСния ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ:
  1. БтатичСскиС ссылки. БтатичСскиС поля Π² Java связаны с классом, Π° Π½Π΅ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ экзСмплярами. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π² памяти Π½Π° протяТСнии всСго срока слуТбы прилоТСния, Ссли с Π½ΠΈΠΌΠΈ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ. НапримСр, статичСская коллСкция, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ элСмСнты Π±Π΅Π· своСврСмСнного удалСния, ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΡƒΡ‚Π΅Ρ‡ΠΊΠ΅ памяти.
  2. ΠŸΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ (Listeners ΠΈ Callbacks). Π’ Java, особСнно Π² прилоТСниях с графичСским интСрфСйсом ΠΈΠ»ΠΈ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ шаблон Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»Ρ (observer), ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ достаточно ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ явлСниСм. Если эти ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ сбору мусора для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° это Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ°ΠΌ памяти.
  3. ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Однако ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΡΡˆΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ Π½Π΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ объСм памяти, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ΅.
  4. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. Π’Π°ΠΊΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ HashMap ΠΈΠ»ΠΈ ArrayList, ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для программирования Π½Π° Java. Однако Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ коллСкциями ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ°ΠΌ памяти. НапримСр, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡ… удалСния, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ останутся Π² памяти Π½Π° Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ срок.
  5. НСзакрытыС рСсурсы. Π’Π°ΠΊΠΈΠ΅ рСсурсы, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, сСтСвыС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², Ссли ΠΎΠ½ΠΈ Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ°ΠΌ памяти. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ рСсурс хранится Π² памяти, ΠΈ Ссли Π΅Π³ΠΎ Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ, эта ΠΏΠ°ΠΌΡΡ‚ΡŒ остаСтся занятой.
  6. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ классы. НСстатичСскиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ классы содСрТат Π½Π΅ΡΠ²Π½ΡƒΡŽ ссылку Π½Π° свой внСшний класс. Если экзСмпляры этих Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ экзСмпляры своих Π²Π½Π΅ΡˆΠ½ΠΈΡ… классов Π² памяти.

Как ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ памяти

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π² Java ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, особСнно Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈ слоТных прилоТСниях. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ:
  • Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. По ΠΌΠ΅Ρ€Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ доступного пространства памяти сборщику мусора тяТСлСС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ освобоТдСниСм памяти, Ρ‡Ρ‚ΠΎ часто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ сниТСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.
  • Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ потрСблСния памяти с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Если использованиС памяти вашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ постоянно увСличиваСтся Π±Π΅Π· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ увСличСния Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ прилоТСния, это ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ памяти.
  • Π‘Π±ΠΎΡ€ΠΊΠ° мусора происходит слишком часто. Π’Π°ΠΊΠΈΠ΅ инструмСнты, ΠΊΠ°ΠΊ JConsole ΠΈΠ»ΠΈ VisualVM, ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ частыС дСйствия ΠΏΠΎ сбору мусора, Ρ‡Ρ‚ΠΎ являСтся Ρ‚Ρ€Π΅Π²ΠΎΠΆΠ½Ρ‹ΠΌ сигналом ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти.
  • Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ OutOfMemoryError. Π­Ρ‚ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΡΠ²Π»ΡΡŽΡ‚ΡΡ явным ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ памяти, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠ·-Π·Π° ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти.

Анализ ΠΈ диагностика ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти

Для эффСктивного выявлСния ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ· Π΄Π°ΠΌΠΏΠ° ΠΊΡƒΡ‡ΠΈ. Π”Π°ΠΌΠΏ ΠΊΡƒΡ‡ΠΈ β€” это снимок всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² памяти Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π’Π°ΠΊΠΈΠ΅ инструмСнты, ΠΊΠ°ΠΊ Eclipse Memory Analyzer (MAT) ΠΈΠ»ΠΈ VisualVM, способны Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°ΠΌΠΏΡ‹ ΠΊΡƒΡ‡ΠΈ ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‰ΠΈΠ΅ большС всСго памяти, ΠΈ ссылки, ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ сбору мусора. Π”Ρ€ΡƒΠ³ΠΎΠΉ способ обнаруТСния ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ использованиС инструмСнтов профилирования, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ JProfiler ΠΈΠ»ΠΈ YourKit Java Profiler. Π­Ρ‚ΠΈ инструмСнты ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ распрСдСлСниС памяти ΠΈ сборку мусора Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, прСдоставляя ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ°ΠΌΡΡ‚ΡŒ. ВыявлСниС ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π² Java Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ понимания Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Java управляСт ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, знания распространСнных ошибок ΠΈ эффСктивного использования инструмСнтов диагностики. Распознавая ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΈ симптомы ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ инструмСнты для Π°Π½Π°Π»ΠΈΠ·Π°, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для обнаруТСния ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π² Java

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π² Java β€” ваТнСйшая Π·Π°Π΄Π°Ρ‡Π° для обСспСчСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ прилоТСния. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ для нас, сСйчас ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ΠΈ Π΄ΠΈΠ°Π³Π½ΠΎΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ. Π­Ρ‚ΠΈ инструмСнты Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ стандартных инструмСнтов профилирования ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² JDK, Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… сторонних ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ интСрфСйсы.

VisualVM

VisualVM β€” это комплСксный инструмСнт для устранСния Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ нСсколько инструмСнтов ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки JDK ΠΈ ΠΎΠ±Π»Π΅Π³Ρ‡Π΅Π½Π½Ρ‹Π΅ возмоТности ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ профилирования памяти. Он Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Oracle JDK.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности:

  • ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти прилоТСниями Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
  • АнализируСт Π΄Π°ΠΌΠΏΡ‹ ΠΊΡƒΡ‡ΠΈ для выявлСния ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти.
  • ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнного срСдства ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΊΡƒΡ‡ΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

VisualVM ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° использования памяти Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌ Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Если происходит постоянноС ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΡƒΡ‡ΠΈ Π² сочСтании с ΠΏΠΎΠ»Π½ΠΎΠΉ сборкой мусора, Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎ памяти, это ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ памяти.

Eclipse Memory Analyzer (MAT)

Eclipse MAT β€” спСциализированный инструмСнт, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°ΠΌΠΏΠΎΠ² ΠΊΡƒΡ‡ΠΈ. Он вСсьма эффСктивСн для выявлСния ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти ΠΈ сниТСния потрСблСния памяти.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности:

  • Анализ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°ΠΌΠΏΠΎΠ² ΠΊΡƒΡ‡ΠΈ.
  • АвтоматичСски выявляСт ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Π΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΡƒΡ‚Π΅Ρ‡ΠΊΠ΅ памяти.
  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠΈ памяти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

ПослС получСния Π΄Π°ΠΌΠΏΠ° ΠΊΡƒΡ‡ΠΈ ΠΈΠ· Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ прилоТСния (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ Π² JVM ΠΏΡ€ΠΈ ошибкС OutOfMemoryError), MAT ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π°Π½Π°Π»ΠΈΠ·Π° этого Π΄Π°ΠΌΠΏΠ°. Он прСдоставляСт гистограмму ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² памяти, позволяя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ классы ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ большС всСго памяти.

JProfiler

JProfiler β€” это комплСксный инструмСнт профилирования для Java с возмоТностями профилирования ΠΊΠ°ΠΊ памяти, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π­Ρ‚ΠΎ коммСрчСский инструмСнт, Π½ΠΎ ΠΎΠ½ ΡˆΠΈΡ€ΠΎΠΊΠΎ извСстСн благодаря ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌΡƒ интСрфСйсу ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΌΡƒ Π°Π½Π°Π»ΠΈΠ·Ρƒ.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности:

  • ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти ΠΈ процСссора Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΊΡƒΡ‡ΠΈ ΠΈ визуализация.
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΊΡƒΡ‡Π΅ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

JProfiler ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ использованиС Π΅Π³ΠΎ памяти Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ распрСдСлСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ, Π³Π΄Π΅ Π² ΠΊΠΎΠ΄Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π·Π°Π΄Π°Ρ‡ΠΈ, интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Java-ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ YourKit

YourKit β€” Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ коммСрчСский инструмСнт профилирования, извСстный своСй ΡˆΠΈΡ€ΠΎΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠ°ΠΊ процСссора, Ρ‚Π°ΠΊ ΠΈ памяти.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности:

  • КомплСксноС ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠ°ΠΊ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΈ послС ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Π° с ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ΠΌ памяти.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΈ сСрвСров ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

Подобно JProfiler, YourKit ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊ Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° распрСдСлСния памяти, исслСдования сборки мусора ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° содСрТимого ΠΊΡƒΡ‡ΠΈ.

Java Flight Recorder (JFR) ΠΈ Java Mission Control (JMC)

Java Flight Recorder ΠΈ Java Mission Control β€” это инструмСнты, входящиС Π² ΠΏΠ°ΠΊΠ΅Ρ‚ Oracle JDK. JFR ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сбора диагностичСских ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Java, Π° JMC β€” для Π°Π½Π°Π»ΠΈΠ·Π° этих Π΄Π°Π½Π½Ρ‹Ρ….

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности:

  • Π‘Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ расходами.
  • Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· собранных Π΄Π°Π½Π½Ρ‹Ρ….
  • ПолСзно ΠΊΠ°ΠΊ для срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Ρ‚Π°ΠΊ ΠΈ для производствСнной срСды.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

JFR ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для записи Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JMC, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ закономСрности распрСдСлСния памяти, Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ использованиС. Π’Ρ‹Π±ΠΎΡ€ инструмСнта Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΈΠ΅ инструмСнты, ΠΊΠ°ΠΊ VisualVM ΠΈ Eclipse MAT, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ подходят для ΡƒΠ³Π»ΡƒΠ±Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ инструмСнты профилирования, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ JProfiler ΠΈ YourKit, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΎΠ±Π·ΠΎΡ€ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΊΠ°ΠΊ памяти, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Java Flight Recorder ΠΈ Java Mission Control ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ возмоТности, особСнно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π² производствСнных срСдах. Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ использованиС этих инструмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ, Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΈ устранСнии ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π² прилоТСниях Java.

Как ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ появлСниС ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π² Java

ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π² Java ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для обСспСчСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π₯отя ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ стратСгии Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² смогут ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’ΠΎΡ‚ нСсколько эффСктивных стратСгий ΠΈ Π»ΡƒΡ‡ΡˆΠΈΡ… ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ:

ПониманиС ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΈ области дСйствия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

  • РСкомСндация: Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΠΉΡ‚Π΅, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ находятся Π² области дСйствия Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹.
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: По возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ привязаны ΠΊ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠΌΡƒ Ρ†ΠΈΠΊΠ»Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‚ сбору мусора послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ выполнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС статичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

  • РСкомСндация: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ статичСскиС поля с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² памяти Π½Π° протяТСнии всСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сущСствования класса. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ статичСских ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ растут бСсконСчно.
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° статичСская коллСкция, рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ стратСгии очистки, которая пСриодичСски удаляСт Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ записи.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ

  • РСкомСндация: всСгда отмСняйтС Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, особСнно Π² прилоТСниях с графичСским интСрфСйсом ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с внСшними рСсурсами.
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Android ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ broadcast-сообщСний Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ onDestroy(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ контСкста.

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ эффСктивных стратСгий ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ

  • РСкомСндация: Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, практикуя ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ вытСснСния. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΡŒΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ кэшСй ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ мягкиС ΠΈΠ»ΠΈ слабыС ссылки.
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ java.lang.ref.WeakReference для записСй кэша, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ сборщиком мусором, Ссли ΠΏΠ°ΠΌΡΡ‚ΡŒ понадобится Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС.

Π Π°Π·ΡƒΠΌΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

  • РСкомСндация: Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с коллСкциями. УдаляйтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹.
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π² Ρ„Π°ΠΉΠ»Π΅ HashMap всСгда удаляйтС записи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ большС Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, особСнно Π² случаях Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ кэша ΠΈΠ»ΠΈ управлСния ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ.

Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классах

  • РСкомСндация: Π±ΡƒΠ΄ΡŒΡ‚Π΅ остороТны с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ классами. НСстатичСскиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ классы содСрТат Π½Π΅ΡΠ²Π½ΡƒΡŽ ссылку Π½Π° экзСмпляры своих Π²Π½Π΅ΡˆΠ½ΠΈΡ… классов.
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ статичСскиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ классы, Ссли экзСмпляр Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ класса ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΡ‚ΡŒ экзСмпляр внСшнСго класса.

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΠΉΡ‚Π΅ рСсурсы

  • РСкомСндация: всСгда Π·Π°ΠΊΡ€Ρ‹Π²Π°ΠΉΡ‚Π΅ рСсурсы (Ρ„Π°ΠΉΠ»Ρ‹, ΠΏΠΎΡ‚ΠΎΠΊΠΈ, соСдинСния) послС использования.
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ try-with-resources для автоматичСского управлСния рСсурсами.

РСгулярно отслСТивайтС Ρ€Π°Π±ΠΎΡ‚Ρƒ прилоТСния ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅

  • РСкомСндация: рСгулярно ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ использованию памяти, особСнно послС добавлСния Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ внСсСния сущСствСнных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΈΠ΅ инструмСнты, ΠΊΠ°ΠΊ VisualVM ΠΈΠ»ΠΈ JProfiler, для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° использования ΠΊΡƒΡ‡ΠΈ ΠΈ отслСТивания ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти.

Код-Ρ€Π΅Π²ΡŒΡŽ ΠΈ ΠΏΠ°Ρ€Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

  • Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ: рСгулярныС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΈ сСансы ΠΏΠ°Ρ€Π½ΠΎΠ³ΠΎ программирования ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти Π½Π° Ρ€Π°Π½Π½Π΅ΠΉ стадии.
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π’ΠΎ врСмя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ особоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС статичСских ΠΏΠΎΠ»Π΅ΠΉ, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами.

ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ тСстированиС

  • РСкомСндация: Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ тСсты для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти, особСнно Π² критичСских частях прилоТСния.
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΊΠ°ΠΊ JUnit, вмСстС с инструмСнтами профилирования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ тСстированиС Π½Π° ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти.
Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ пСрСчислСнных Π²Ρ‹ΡˆΠ΅ стратСгий Π² процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ риск ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π² прилоТСниях Java. Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, здСсь Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ кодирования, Π·Π½Π°Π½ΠΈΠΈ распространСнных ошибок ΠΈ рСгулярном ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅ ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ прилоТСния. Π­Ρ‚ΠΈ ΠΏΡ€Π΅Π²Π΅Π½Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΌΠ΅Ρ€Ρ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‚ созданию Π±ΠΎΠ»Π΅Π΅ чистого, эффСктивного ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Π² сопровоТдСнии ΠΊΠΎΠ΄Π°.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ПониманиС ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π² Java ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ эффСктивных ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Зная ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ инструмСнты для обнаруТСния ΠΈ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡΡΡŒ Π»ΡƒΡ‡ΡˆΠΈΡ… ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. РСгулярный ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³, ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ΄Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ³Ρ€Π°ΡŽΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠΈ отсутствия ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ прилоТСния Π½Π° протяТСнии всСго Π΅Π³ΠΎ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°.
ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ
  • популярныС
  • Π½ΠΎΠ²Ρ‹Π΅
  • старыС
Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ
Π£ этой страницы Π΅Ρ‰Π΅ Π½Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ коммСнтария