Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java

Как Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Java большС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти

Из-Π·Π° взаимодСйствия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Java с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ошибки, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π»Π΅ΠΆΠΈΡ‚ Π½Π° ΠΏΠ»Π΅Ρ‡Π°Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Оно достигаСтся двумя путями: пСрСустановкой модуля ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти Java. Π‘ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ситуациСй стоит Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

Π—Π°Ρ‡Π΅ΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Java

Π—Π°Π΄Π°Ρ‡Ρƒ ΠΏΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ Java памяти ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ставят ΠΏΠ΅Ρ€Π΅Π΄ собой Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… случаях:

Π˜ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ двумя способами.

Как Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Java

Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π”ΠΆΠ°Π²Π°-ΠΌΠΎΠ΄ΡƒΠ»ΡŽ большС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· «ПанСль управлСния». Бпособ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с запуском ΠΈΠ³Ρ€Ρ‹ Minecraft.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ:

Если это Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Minecraft, пСрСустановитС ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Java ΠΈ ΠΈΠ³Ρ€Ρƒ. ПослС удалСния очиститС рССстр с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CCleaner.

Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ памяти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… срСды

Π§Ρ‚ΠΎΠ±Ρ‹ систСма воспринимала написанныС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β«_JAVA_OPTIONSΒ».

Если количСство памяти, ΠΎΡ‚Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Java, Π² Π΄Π²Π° Ρ€Π°Π·Π° мСньшС ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²ΠΊΠΈ, Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ инструкции:

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ объСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²ΠΊΠΈ составлял 1 Π“Π±.

Π’ΠΈΠ΄Π΅ΠΎ: 3 способа Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ большС памяти Java.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассмотрСно Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° увСличСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, выдСляСмой для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Java-модуля.

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

Java-Xmx, максимальная ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² систСмС

Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΅ΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹? И, ΠΊΠ°ΠΊ ΠΌΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π²ΡƒΠΊ?

Edit: я Π½Π΅ ΠΌΠΎΠ³Ρƒ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ-это встроСнноС сТатиС Java pack200, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ для ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² JAR.

7 ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²

Π² зависимости ΠΎΡ‚ вашСй ОБ это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ для получСния свободного ΠΈ доступного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° памяти:

ΠΎΡ‚Ρ‚ΡƒΠ΄Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ 80-90% ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π±Π°Π½ΠΊΡƒ с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅.

Π― Π½Π΅ знаю, Ρ‡Ρ‚ΠΎ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со всСми ОБ (Ρ‚. Π΅. Windows), Π½ΠΎ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π», ΠΊΠΎΠ³Π΄Π° я тСстировал Π΅Π³ΠΎ с OSX ΠΈ Linux.

Π½Π° ОБ Π½Π΅-windows Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΉΡ‚ΠΈ большС, ΠΈ 64Bit JVM способны Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС.

Windows XP Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ 3 Π“Π‘ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ( Π½Π΅Π²Π°ΠΆΠ½ΠΎ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρƒ вас 4 Π“Π‘ физичСской, начиная с XP SP3) Vista ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ YMMV.

Π― ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»-Xmx4000M Π½Π° 64-Π±ΠΈΡ‚Π½ΠΎΠΌ JVM Π½Π° 64-Π±ΠΈΡ‚Π½ΠΎΠΌ Linux, ΠΈ это Π±Ρ‹Π»ΠΎ ΡˆΡ‚Ρ€Π°Ρ„. учитывая, Ρ‡Ρ‚ΠΎ Ρƒ мСня Π±Ρ‹Π»ΠΎ 6Gb физичСской ΠžΠ—Π£, это Π±Ρ‹Π» Π½Π΅ большой запрос.

ваша идСя 80% интСрСсна, Π½ΠΎ ΠΌΠΎΠΈ тСстовыС систСмы Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π±ΠΎΠ»Π΅Π΅ высокими ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°ΠΌΠΈ, Ρ‡Π΅ΠΌ это Π±Π΅Π· ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ эффСкта. (Π”ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Π΅.)

ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΡ€Π°Π², Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π½Π° страницы вашСго ΠΎΠ±Ρ€Π°Π·Π° JVM Π² памяти происходит Π½Π΅ быстро. ПозТС JVM Π»ΡƒΡ‡ΡˆΠ΅ Π΄Π΅Π»Π°ΡŽΡ‚ это ΠΌΠ΅Π½Π΅Π΅ бСспорядочно (Π½ΠΎ Ρƒ Π½ΠΈΡ… Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠ΅ сборщики мусора)

Если Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π²Π°ΡˆΡƒ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅-ΠΈ я знаю, ΠΊΠ°ΠΊ это Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ – Ρ‚ΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ физичСской ΠžΠ—Π£ ΠΈ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π΅Π³ΠΎ.

Π½Ρƒ, ΠΎΠ΄Π½Π° Π²Π΅Ρ‰ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я ΠΌΠΎΠ³Ρƒ Π²Π°ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, это Π½Π΅ позволяйтС Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚ΡŒΡΡ ΠΊ заполнСнию ΠžΠ—Π£. Java-прилоТСния Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ мСстами. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΈΠ·-Π·Π° сбора мусора java постоянно вытягиваСт свою ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΠ· swap.

Π― ΠΏΠΎΠΏΠ°Π» Π² Ρ‚ΡƒΠΏΠΈΠΊ, Π³Π΄Π΅ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ систСма Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π»Π° java для памяти, которая Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ GC ΠΈ Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ-Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ систСма Π±ΡƒΠ΄Π΅Ρ‚ просто Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° я Π½Π΅ ΡΠ±Ρ€ΠΎΡˆΡƒ Π΅Π΅.

Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ с большим количСством ΠžΠ—Π£ ΠΈ большим пространством ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ (для врСмя) ΠΈ Π±ΠΎΠ»Π΅Π΅ старая Java VM, поэтому ваш ΠΏΡ€ΠΎΠ±Π΅Π³ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ.

ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ запускаСтС это Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ-Xms для вашСго прилоТСния вмСсто Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Если Π²Ρ‹ Π΄Π°Π΅Ρ‚Π΅ Π΅ΠΌΡƒ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π΄Π°ΠΉΡ‚Π΅ Π΅ΠΌΡƒ-Xms, Π½ΠΎ Ссли Π²Ρ‹ просто Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ основной класс Π² jar, Ρ‚ΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½ΡƒΠΆΠ΅Π½-Xms. (О, Π²Ρ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ, Π΄Π°, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ «Java», ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅. )

Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ОБ для выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π±Π°Π½ΠΊΠ΅? Если Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ выполнялся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ процСссС ΠΎΡ‚ вашСго прилоТСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ основной ΠΌΠ΅Ρ‚ΠΎΠ΄ нСпосрСдствСнно ΠΈΠ· своСго ΠΊΠΎΠ΄Π° ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Π»ΡŽΠ±Ρ‹ΠΌ-Xmx, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅.

Если Π²Ρ‹ Π΅Ρ‰Π΅ этого Π½Π΅ сдСлали, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ памяти. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ большС Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ.

JProfiler довольно изящный, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ HPROF, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» прСдставлСн Π² Java 5:http://java.sun.com/developer/technicalArticles/Programming/HPROF.html

ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΡƒΡ‡ΠΈ, основанныС Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ (32-Π±ΠΈΡ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ² 64-Π±ΠΈΡ‚), ОБ ΠΈ Π΄Π°ΠΆΠ΅ JVM.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π’Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΈΠ· XML-Ρ„Π°ΠΉΠ»Π°), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ сниТСниС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ памяти ΠΏΡƒΡ‚Π΅ΠΌ объСдинСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

сущСствуСт ΠΏΠΎΠ»Π½ΠΎΠ΅ сообщСниС Π² Π±Π»ΠΎΠ³Π΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΊΠΈ java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ jconsole ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π±Π»ΠΎΠ³. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ отсутствиС контроля Π½Π°Π΄ использованиСм памяти, скорСС всСго, являСтся ΡƒΡ‚Π΅Ρ‡ΠΊΠΎΠΉ памяти, Π½ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связано ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ. ВзглянитС Π½Π° сообщСниС, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот сцСнарий ΠΈ посмотритС, Ρ€Π΅ΡˆΠΈΠ»ΠΎ Π»ΠΈ это Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

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

Π Π°Π·ΠΌΠ΅Ρ€ Java ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π—Π½Π°Π΅Ρ‚Π΅ сколько Π² памяти Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ строка? ΠšΠ°ΠΊΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ я Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π» ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² Π½Π° этот вопрос, начиная ΠΎΡ‚ Β«Π½Π΅ знаю» Π΄ΠΎ Β«2 Π±Π°ΠΉΡ‚Π° * количСство символов Π² строкС». А сколько Ρ‚ΠΎΠ³Π΄Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ пустая строка? А Π·Π½Π°Π΅Ρ‚Π΅ сколько Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Integer? А сколько Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π’Π°Ρˆ собствСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса с трСмя Integer полями? Π—Π°Π±Π°Π²Π½ΠΎ, Π½ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΉ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ Java программист Π½Π΅ смог ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° эти вопросы… Π”Π°, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ ΠΈΠ· нас это Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈ Π½ΠΈΠΊΡ‚ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ± этом Π΄ΡƒΠΌΠ°Ρ‚ΡŒ. Но это, вСдь, ΠΊΠ°ΠΊ Π½Π΅ Π·Π½Π°Ρ‚ΡŒ объСм двигатСля ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π’Ρ‹ Π΅Π·Π΄ΠΈΡ‚Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ‹Ρ‚ΡŒ прСкрасным Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π°Ρ‚ Ρ†ΠΈΡ„Ρ€Ρ‹ 2.4 ΠΈΠ»ΠΈ 1.6 Π½Π° вашСй машинС. Но я ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ найдСтся ΠΌΠ°Π»ΠΎ людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ этих Ρ†ΠΈΡ„Ρ€. Π’Π°ΠΊ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ java программисты Ρ‚Π°ΠΊ ΠΌΠ°Π»ΠΎ Π·Π½Π°ΡŽΡ‚ ΠΎΠ± этой части своСго инструмСнта?

Integer vs int

ВсС ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² java β€” everything is an object. ΠšΡ€ΠΎΠΌΠ΅, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² ΠΈ ссылок Π½Π° сами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π΄Π²Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ситуации:

Π’ этих простых строках Ρ€Π°Π·Π½ΠΈΡ†Π° просто ΠΎΠ³Ρ€ΠΎΠΌΠ½Π°, ΠΊΠ°ΠΊ для JVM Ρ‚Π°ΠΊ ΠΈ для ООП. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС, всС Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ β€” это 4-Ρ… байтная пСрСмСнная, которая содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· стСка. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС Ρƒ нас Π΅ΡΡ‚ΡŒ ссылочная пСрСмСнная ΠΈ сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ эта пСрСмСнная ссылаСтся. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π²Π΅Π½:

ЗабСгая Π²ΠΏΠ΅Ρ€Π΅Π΄ скаТу β€” Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС количСство потрСбляСмой памяти ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² 5 Ρ€Π°Π· большС ΠΈ зависит ΠΎΡ‚ JVM. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π°Π·Π½ΠΈΡ†Π° Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ³Ρ€ΠΎΠΌΠ½Π°.

Из Ρ‡Π΅Π³ΠΎ ΠΆΠ΅ состоит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚?
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
БпСцификация Java

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π² Java ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€, этого Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ спСцификация для пСрСносимости ΠΊΠΎΠ΄Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°Ρ…, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС прСкрасно описано ΠΏΠΎ ссылкС Π²Ρ‹ΡˆΠ΅. А Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ спСцификация для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²? НичСго, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΅ΡΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ. Π˜Π½Ρ‹ΠΌΠΈ словами, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ экзСмпляров Π’Π°ΡˆΠΈΡ… классов ΠΌΠΎΠ³ΡƒΡ‚ отличатся ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ JVM ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. БобствСнно, для простоты излоТСния я Π±ΡƒΠ΄Ρƒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π° 32-Ρ… разрядной Oracle HotSpot JVM. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ самыС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ классы Integer ΠΈ String.

Integer ΠΈ String

Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сколько ΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Integer Π² нашСй 32-Ρ… разрядной HotSpot JVM. Для этого Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π² сам класс, Π½Π°ΠΌ интСрСсны всС поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ static. Из Ρ‚Π°ΠΊΠΈΡ… Π²ΠΈΠ΄ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ β€” int value. Π’Π΅ΠΏΠ΅Ρ€ΡŒ исходя ΠΈΠ· ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ заглянСм Π² класс строки:

И подсчитаСм Ρ€Π°Π·ΠΌΠ΅Ρ€:

Ну ΠΈ это Π΅Ρ‰Π΅ Π½Π΅ всС… Π’Π°ΠΊ ΠΊΠ°ΠΊ строка содСрТит ссылку Π½Π° массив символов, Ρ‚ΠΎ, ΠΏΠΎ сути, ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с двумя Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса String ΠΈ самим массивом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ строку. Π­Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π±Ρ‹, Π²Π΅Ρ€Π½ΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ООП, Π½ΠΎ Ссли ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° это со стороны памяти, Ρ‚ΠΎ ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ для символов массива. А это Π΅Ρ‰Π΅ 12 Π±Π°ΠΉΡ‚ Π½Π° сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ массива + 2 Π±Π°ΠΉΡ‚Π° Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ строки. Ну ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ для кратности 8 Π±Π°ΠΉΡ‚Π°ΠΌ. Π˜Ρ‚ΠΎΠ³ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ простая, казалось Π±Ρ‹, строка new String(Β«aΒ») выливаСтся Π²:

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ new String(Β«aΒ») ΠΈ new String(Β«aaΒ») Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ количСство памяти. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования этого Ρ„Π°ΠΊΡ‚Π° Π² свою ΠΏΠΎΠ»ΡŒΠ·Ρƒ β€” ΠΏΠΎΠ»Π΅ hash Π² классС String. Если Π±Ρ‹ Π΅Π³ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ, Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ строки Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ Π·Π°Π½ΠΈΠΌΠ°Π» Π±Ρ‹ 24 Π±Π°ΠΉΡ‚Π°, Π·Π° счСт выравнивания. А Ρ‚Π°ΠΊ получаСтся Ρ‡Ρ‚ΠΎ для этих 4-Ρ… Π±Π°ΠΉΡ‚ΠΎΠ² нашлось ΠΎΡ‡Π΅Π½ΡŒ достойноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. Π“Π΅Π½ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π½Π΅ ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ?

Π Π°Π·ΠΌΠ΅Ρ€ ссылки

НСмноТко Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ оговорится ΠΎ ссылочных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Ρ€Π°Π·ΠΌΠ΅Ρ€ ссылки Π² JVM зависит ΠΎΡ‚ Π΅Π΅ разрядности, ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°ΡŽ, Ρ‡Ρ‚ΠΎ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² 32-Ρ… разрядных JVM Ρ€Π°Π·ΠΌΠ΅Ρ€ ссылки ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 4 Π±Π°ΠΉΡ‚Π°, Π° Π² 64-Ρ… разрядных β€” 8 Π±Π°ΠΉΡ‚. Π₯отя это условиС ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎΠ»Π΅ΠΉ
Π—Π°Ρ‡Π΅ΠΌ всС это?

Иногда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ситуация Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠΊΠΈΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ объСм памяти для хранСния Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ словаря, эта малСнькая справка ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ быстро ΡΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π’Π°ΠΊΠΆΠ΅, это ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ способ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, особСнно Π² Ρ‚ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ, Π³Π΄Π΅ доступ ΠΊ Π΅Π³ΠΎ настройкам Π½Π΅ доступСн.

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

РаспрСдСлСниС памяти Π² JVM

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ сСгодняшнСго ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€ΠΈΡƒΡ€ΠΎΡ‡ΠΈΡ‚ΡŒ ΠΊ запуску Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΠΎ курсу Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ JavaΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стартуСт ΡƒΠΆΠ΅ Π·Π°Π²Ρ‚Ρ€Π°. Π§Ρ‚ΠΎ ΠΆ Π½Π°Ρ‡Π½Ρ‘ΠΌ.

JVM ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слоТным Π·Π²Π΅Ρ€Π΅ΠΌ. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, большая Ρ‡Π°ΡΡ‚ΡŒ этой слоТности скрыта ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ, ΠΈ ΠΌΡ‹, ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ отвСтствСнныС Π·Π° Π΄Π΅ΠΏΠ»ΠΎΠΉ, часто Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ± этом сильно Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ. Π₯отя ΠΈΠ·-Π·Π° роста популярности Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ развСртывания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…, стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° распрСдСлСниС памяти Π² JVM.

Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. Π€ΠΎΡ‚ΠΎ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java

Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. Π€ΠΎΡ‚ΠΎ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java

Как Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²Π½Π΅ ΠΊΡƒΡ‡ΠΈ приходится большая Ρ‡Π°ΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ памяти JVM, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΡƒΡ‡ΠΈ составляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ ΡˆΠ΅ΡΡ‚ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΡ‘ΠΌΠ°. Π’ этом случаС это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 44 ΠœΠ‘ (ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… 33 ΠœΠ‘ использовалось сразу послС сборки мусора). ИспользованиС памяти Π²Π½Π΅ ΠΊΡƒΡ‡ΠΈ составило Π² суммС 223 ΠœΠ‘.

ΠžΠ±Π»Π°ΡΡ‚ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти

ΠžΡ‚ΡΡŽΠ΄Π°:
If UseCompressedOops is turned on and UseCompressedClassesPointers is used, then two logically different areas of native memory are used for class metadata…
A region is allocated for these compressed class pointers (the 32-bit offsets). The size of the region can be set with CompressedClassSpaceSize and is 1 gigabyte (GB) by default…
The MaxMetaspaceSize applies to the sum of the committed compressed class space and the space for the other class metadata

Для сТатых ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ выдСляСтся ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти (32-Π±ΠΈΡ‚Π½Ρ‹Π΅ смСщСния). Π Π°Π·ΠΌΠ΅Ρ€ этой области ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСн CompressedClassSpaceSize ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ 1 ГБ…
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ MaxMetaspaceSize относится ΠΊ суммС области сТатых ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ области для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… класса.

По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΊΡƒΡ‡Π΅ΠΉ, ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²Π½Π΅ ΠΊΡƒΡ‡ΠΈ мСньшС измСняСтся ΠΏΠΎΠ΄ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ всС классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ JIT ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ прогрССтся, всё ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ Π² устойчивоС состояниС. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ использования области Compressed class space, Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ» классы, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ сборщиком мусора. Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ распространСно Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° прилоТСния Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… сСрвлСтов ΠΈΠ»ΠΈ сСрвСрах ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ классов прилоТСния удалялся сборщиком мусора, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡƒΠ΄Π°Π»ΡΠ»ΠΎΡΡŒ с сСрвСра ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ), Π½ΠΎ с соврСмСнными ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ ΠΊ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ это случаСтся Ρ€Π΅Π΄ΠΊΠΎ.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ памяти JVM являСтся кэш ΠΊΠΎΠ΄Π° JIT. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ HotSpot JVM Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎ 240 ΠœΠ‘. Если кэш ΠΊΠΎΠ΄Π° слишком ΠΌΠ°Π», Π² JIT ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ мСста для хранСния своих Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ сниТСна ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Если кэш слишком Π²Π΅Π»ΠΈΠΊ, Ρ‚ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π° Π²ΠΏΡƒΡΡ‚ΡƒΡŽ. ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° кэша Π²Π°ΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ влияниС ΠΊΠ°ΠΊ Π½Π° использованиС памяти, Ρ‚Π°ΠΊ ΠΈ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Docker послСдниС вСрсии Java Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π½Π°ΡŽΡ‚ ΠΎΠ± ограничСниях памяти ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти JVM. К соТалСнию, часто происходит Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ большого количСства памяти Π²Π½Π΅ ΠΊΡƒΡ‡ΠΈ ΠΈ нСдостаточного Π² ΠΊΡƒΡ‡Π΅. Допустим, Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ с 2-мя процСссорами ΠΈ 512 ΠœΠ‘ доступной памяти. Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΎΡΡŒ большС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚Π΅ количСство процСссоров Π΄ΠΎ 4-Ρ… ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΄ΠΎ 1 Π“Π‘. Как ΠΌΡ‹ обсуТдали Π²Ρ‹ΡˆΠ΅, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΡƒΡ‡ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ измСняСтся Π² зависимости ΠΎΡ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²Π½Π΅ ΠΊΡƒΡ‡ΠΈ измСняСтся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ большая Ρ‡Π°ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… 512 ΠœΠ‘ Π±ΡƒΠ΄Π΅Ρ‚ прСдоставлСна ΠΊΡƒΡ‡Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ. К соТалСнию, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ JVM этого Π½Π΅ сдСлаСт ΠΈ распрСдСлит Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² ΠΊΡƒΡ‡Π΅ ΠΈ Π²Π½Π΅ ΠΊΡƒΡ‡ΠΈ.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, ΠΊΠΎΠΌΠ°Π½Π΄Π° CloudFoundry ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΎΠ±ΡˆΠΈΡ€Π½Ρ‹ΠΌΠΈ знаниями ΠΎ распрСдСлСнии памяти Π² JVM. Если Π²Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅ прилоТСния Π² CloudFoundry, Ρ‚ΠΎ сборщик (build pack) автоматичСски ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ эти знания для вас. Если Π²Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ CloudFoudry ΠΈΠ»ΠΈ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ большС ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ JVM, Ρ‚ΠΎ рСкомСндуСтся ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ описаниС Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ вСрсии Java buildpack’s memory calculator.

Π§Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚ для Spring

Команда Spring ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, думая ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ использовании памяти, рассматривая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования памяти ΠΊΠ°ΠΊ Π² ΠΊΡƒΡ‡Π΅, Ρ‚Π°ΠΊ ΠΈ Π²Π½Π΅ ΠΊΡƒΡ‡ΠΈ. Один ΠΈΠ· способов ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ использованиС памяти Π²Π½Π΅ ΠΊΡƒΡ‡ΠΈ β€” это Π΄Π΅Π»Π°Ρ‚ΡŒ части Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° максимально ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ этого являСтся использованиС Reflection для создания ΠΈ внСдрСния зависимостСй Π² Π±ΠΈΠ½Ρ‹ вашСго прилоТСния. Благодаря использованию Reflection количСство ΠΊΠΎΠ΄Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅, остаСтся постоянным, нСзависимо ΠΎΡ‚ количСства Π±ΠΈΠ½ΠΎΠ² Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ запуска ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ кэш Π² ΠΊΡƒΡ‡Π΅, очищая этот кэш послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ запуска. ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠΊΡƒΡ‡ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ ΠΎΡ‡ΠΈΡ‰Π΅Π½Π° сборщиком мусора, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ большС доступной памяти Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ.

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΠΆΠ΄Ρ‘ΠΌ ваши ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρƒ.

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

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Java

Π­Ρ‚ΠΎ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Java ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ваши знания ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΡƒΡ‡Π°, ссылочныС Ρ‚ΠΈΠΏΡ‹ ΠΈ сборка мусора.

ВСроятно, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π½Π° Java, Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅Π·Π°Ρ‡Π΅ΠΌ Π·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’ Java Π΅ΡΡ‚ΡŒ автоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, красивый ΠΈ Ρ‚ΠΈΡ…ΠΈΠΉ сборщик мусора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ для очистки Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ освобоТдСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ памяти.

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

Для Π½Π°Ρ‡Π°Π»Π° Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² Java:

Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. Π€ΠΎΡ‚ΠΎ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти javaΠ‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° памяти

Π‘Ρ‚Π΅ΠΊ (Stack)

БтСковая ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ссылок Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΡƒΡ‡ΠΈ ΠΈ Π·Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Ρ‚Π°ΠΊΠΆΠ΅ извСстных Π² Java ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат само Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π½Π΅ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· ΠΊΡƒΡ‡ΠΈ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² стСкС ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ области. НапримСр, прСдполагая, Ρ‡Ρ‚ΠΎ Ρƒ нас Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (ΠΏΠΎΠ»Π΅ΠΉ) области видимости, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ссли компилятор выполняСт Ρ‚Π΅Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΈΠ· стСка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π»Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Он Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π΅ выходят Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости. Когда ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈ возвращаСтся, вСрхняя Ρ‡Π°ΡΡ‚ΡŒ стСка выталкиваСтся, ΠΈ активная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости измСняСтся.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π²Ρ‹ΡˆΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ нСсколько стСков памяти. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ стСковая ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² Java выдСляСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊ создаСтся ΠΈ запускаСтся, ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΡΡ‚Π΅ΠΊΠΎΠ²ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ стСковой памяти Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

ΠšΡƒΡ‡Π° (Heap)

Π­Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ памяти Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² памяти фактичСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· стСка. НапримСр, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ происходит Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС ΠΊΠΎΠ΄Π°:

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово new нСсСт ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° обСспСчСниС Ρ‚ΠΎΠ³ΠΎ, достаточно Π»ΠΈ свободного мСста Π½Π° ΠΊΡƒΡ‡Π΅, создавая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° StringBuilder Π² памяти ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ Π½Π΅ΠΌΡƒ Ρ‡Π΅Ρ€Π΅Π· Β«BuilderΒ» ссылки, которая ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² стСк.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ процСсса JVM сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти Π² ΠΊΡƒΡ‡Π΅. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, это общая Ρ‡Π°ΡΡ‚ΡŒ памяти нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, сколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² выполняСтся. На самом Π΄Π΅Π»Π΅ структура ΠΊΡƒΡ‡ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ отличаСтся ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π²Ρ‹ΡˆΠ΅. Π‘Π°ΠΌΠ° ΠΊΡƒΡ‡Π° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° нСсколько частСй, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ процСсс сборки мусора.

Π’ΠΈΠΏΡ‹ ссылок

Если Π²Ρ‹ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ посмотритС Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ структуры памяти, Π²Ρ‹, вСроятно, Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ стрСлки, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· ΠΊΡƒΡ‡ΠΈ, Π½Π° самом Π΄Π΅Π»Π΅ относятся ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π² языкС программирования Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ссылок: ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅, слабыС, мягкиС ΠΈ Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½Ρ‹Π΅ ссылки. Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ссылок Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΊΡƒΡ‡Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΎ Π½Π° сборку мусора ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ критСриям. Рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ· Π½ΠΈΡ….

1. Бильная ссылка

Π­Ρ‚ΠΎ самыС популярныС ссылочныС Ρ‚ΠΈΠΏΡ‹, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ всС ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ со StringBuilder ΠΌΡ‹ фактичСски Ρ…Ρ€Π°Π½ΠΈΠΌ ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· ΠΊΡƒΡ‡ΠΈ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΊΡƒΡ‡Π΅ Π½Π΅ удаляСтся сборщиком мусора, ΠΏΠΎΠΊΠ° Π½Π° Π½Π΅Π³ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ сильная ссылка ΠΈΠ»ΠΈ Ссли ΠΎΠ½ явно доступСн Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… ссылок.

2. Блабая ссылка

ΠŸΠΎΠΏΡ€ΠΎΡΡ‚Ρƒ говоря, слабая ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· ΠΊΡƒΡ‡ΠΈ, скорСС всСго, Π½Π΅ сохранится послС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ процСсса сборки мусора. Блабая ссылка создаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ПослС сбора мусора ΠΊΠ»ΡŽΡ‡Π° ΠΈΠ· WeakHashMap вся запись удаляСтся ΠΈΠ· ΠΊΠ°Ρ€Ρ‚Ρ‹.

3. Мягкая ссылка

Подобно слабым ссылкам, мягкая ссылка создаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

4. Ѐантомная ссылка

Бсылки Π½Π° String

Бсылки Π½Π° Ρ‚ΠΈΠΏ String Π² Java ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ- Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ нСизмСняСмы, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ со строкой, Π² ΠΊΡƒΡ‡Π΅ фактичСски создаСтся Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Для строк Java управляСт ΠΏΡƒΠ»ΠΎΠΌ строк Π² памяти. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Java сохраняСт ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ строки, ΠΊΠΎΠ³Π΄Π° это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π’ основном это Π²Π΅Ρ€Π½ΠΎ для строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ². НапримСр:

ΠŸΡ€ΠΈ запускС этот ΠΊΠΎΠ΄ распСчатываСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, оказываСтся, Ρ‡Ρ‚ΠΎ Π΄Π²Π΅ ссылки Ρ‚ΠΈΠΏΠ° String Π½Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ фактичСски ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΊΡƒΡ‡Π΅. Однако это Π½Π΅ дСйствуСт для вычисляСмых строк. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² строкС // 1 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π°.

Strings are different

ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ измСнСния создаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

ΠŸΡ€ΠΎΡ†Π΅ΡΡ сборки мусора

Как ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ссылки, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ пСрСмСнная ΠΈΠ· стСка содСрТит Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· ΠΊΡƒΡ‡ΠΈ, Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ становится подходящим для сборщика мусора.

Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. Π€ΠΎΡ‚ΠΎ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти javaΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, подходящиС для сборки мусора

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

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π² Π΄Π΅Ρ‚Π°Π»ΠΈ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сначала упомянСм нСсколько Π²Π΅Ρ‰Π΅ΠΉ:

Π­Ρ‚ΠΎΡ‚ процСсс запускаСтся автоматичСски Java, ΠΈ Java Ρ€Π΅ΡˆΠ°Π΅Ρ‚, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅Ρ‚ этот процСсс.

На самом Π΄Π΅Π»Π΅ это дорогостоящий процСсс. ΠŸΡ€ΠΈ запускС сборщика мусора всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ (Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° GC, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ·ΠΆΠ΅).

На самом Π΄Π΅Π»Π΅ это Π±ΠΎΠ»Π΅Π΅ слоТный процСсс, Ρ‡Π΅ΠΌ просто сбор мусора ΠΈ освобоТдСниС памяти.

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Java Ρ€Π΅ΡˆΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ сборщик мусора, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ явно Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ System.gc() ΠΈ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ сборщик мусора Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этой строки ΠΊΠΎΠ΄Π°, Π²Π΅Ρ€Π½ΠΎ?

Π­Ρ‚ΠΎ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π’Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ Π±Ρ‹ проситС Java Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сборщик мусора, Π½ΠΎ, ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, Java Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ, Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π’ любом случаС явно Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ System.gc() Π½Π΅ рСкомСндуСтся.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это довольно слоТный процСсс ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΎΠ½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ процСсс Β«Mark and SweepΒ». Java Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· стСка ΠΈ Β«ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚Β» всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ состоянии. Π—Π°Ρ‚Π΅ΠΌ всС Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΡ‡ΠΈΡ‰Π°ΡŽΡ‚ΡΡ.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Java Π½Π΅ собираСт мусор. ЀактичСски, Ρ‡Π΅ΠΌ большС мусора ΠΈ Ρ‡Π΅ΠΌ мСньшС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ ΠΆΠΈΠ²Ρ‹Π΅, Ρ‚Π΅ΠΌ быстрСС ΠΈΠ΄Π΅Ρ‚ процСсс. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΡƒΡ‡ΠΈ Π½Π° самом Π΄Π΅Π»Π΅ состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… частСй. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ использованиС памяти ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JVisualVM, инструмСнта, поставляСмого с Java JDK. ЕдинствСнноС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Visual GC, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π½Π° самом Π΄Π΅Π»Π΅ структурирована ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π± ΠΈ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ:

Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти java. Π€ΠΎΡ‚ΠΎ Каким ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти javaПоколСния памяти ΠΊΡƒΡ‡ΠΈ

Когда ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создаСтся, ΠΎΠ½ размСщаСтся Π² пространствС Eden (1). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ пространство Eden Π½Π΅ Ρ‚Π°ΠΊΠΎΠ΅ ΡƒΠΆ большоС, ΠΎΠ½ΠΎ заполняСтся довольно быстро. Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊ мусора Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² пространствС Eden ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠ°ΠΊ ΠΆΠΈΠ²Ρ‹Π΅.

Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²Ρ‹ΠΆΠΈΠ²Π°Π΅Ρ‚ Π² процСссС сборки мусора, ΠΎΠ½ пСрСмСщаСтся Π² Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ пространство Π²Ρ‹ΠΆΠΈΠ²ΡˆΠ΅Π³ΠΎ S0(2). Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° сборщик мусора запускаСтся Π² пространствС Eden, ΠΎΠ½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ всС ΡƒΡ†Π΅Π»Π΅Π²ΡˆΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² пространство S1(3). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, всС, Ρ‡Ρ‚ΠΎ Π² настоящСС врСмя находится Π½Π° S0(2), пСрСмСщаСтся Π² пространство S1(3).

Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²Ρ‹ΠΆΠΈΠ²Π°Π΅Ρ‚ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ X Ρ€Π°ΡƒΠ½Π΄ΠΎΠ² сборки мусора (X зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ JVM, Π² ΠΌΠΎΠ΅ΠΌ случаС это 8), скорСС всСго, ΠΎΠ½ Π²Ρ‹ΠΆΠΈΠ²Π΅Ρ‚ Π²Π΅Ρ‡Π½ΠΎ ΠΈ пСрСмСщаСтся Π² пространство Old(4).

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ всС сказанноС Π²Ρ‹ΡˆΠ΅, Ссли Π²Ρ‹ посмотритС Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊ сборщика мусора (6), ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ запускаСтся, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π½Π° пространство Π²Ρ‹ΠΆΠΈΠ²ΡˆΠΈΡ… ΠΈ Ρ‡Ρ‚ΠΎ пространство Π­Π΄Π΅ΠΌΠ° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π»ΠΎΡΡŒ. И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π‘Ρ‚Π°Ρ€ΠΎΠ΅ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ сборщиком мусора, Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это большая Ρ‡Π°ΡΡ‚ΡŒ памяти ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с пространством Eden, это происходит Π½Π΅ Ρ‚Π°ΠΊ часто. ΠœΠ΅Ρ‚Π°ΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ (5) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ Π²Π°ΡˆΠΈΡ… Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… классах Π² JVM.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° самом Π΄Π΅Π»Π΅ являСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Java 8. Π”ΠΎ Java 8 структура памяти Π±Ρ‹Π»Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. ΠœΠ΅Ρ‚Π°ΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ называСтся PermGen ΠΎΠ±Π»Π°ΡΡ‚ΡŒ. НапримСр, Π² Java 6 это пространство Ρ‚Π°ΠΊΠΆΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ для ΠΏΡƒΠ»Π° строк. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Java 6 слишком ΠΌΠ½ΠΎΠ³ΠΎ строк, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Π’ΠΈΠΏΡ‹ сборщиков мусора

ЀактичСски, JVM ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° сборщиков мусора, ΠΈ программист ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Java Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ сборщика мусора Π² зависимости ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ оборудования.

3. Mostly concurrent GC (Π’ основном ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ сборщик мусора). Если Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ€Π°Π½Π΅Π΅ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ процСсс сбора мусора Π½Π° самом Π΄Π΅Π»Π΅ довольно дорогостоящий, ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ выполняСтся, всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ. Однако Ρƒ нас Π΅ΡΡ‚ΡŒ Π² основном ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ GC, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Однако Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ Β«Π² основном» ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»Π΅Π½. Он Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° 100% ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π•ΡΡ‚ΡŒ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠ°ΡƒΠ·Π° дСлаСтся ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΡ€ΠΎΡ‡Π΅ для достиТСния Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ сборщика мусора. На самом Π΄Π΅Π»Π΅ сущСствуСт 2 Ρ‚ΠΈΠΏΠ° Π² основном ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… сборщиков мусора:

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΏΡ€ΠΎ сборщики мусора для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… вСрсий Java ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅:

Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ объСм памяти, максимально ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡŒΡ‚Π΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° выскакиваСт вСрхняя ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΈΠ· стСка, ссылки ΠΈΠ· этой области Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ, ΠΈ это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌΠΈ для сбора мусора.

Π―Π²Π½ΠΎ устанавливайтС Π² null ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ ссылки. Π­Ρ‚ΠΎ сдСлаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ, подходящими для сбора мусора.

Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Ρ„ΠΈΠ½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² (finalizer). Они Π·Π°ΠΌΠ΅Π΄Π»ΡΡŽΡ‚ процСсс ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚. Π€Π°Π½Ρ‚ΠΎΠΌΠ½Ρ‹Π΅ ссылки ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ очисткС памяти.

JVisualVM Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ создания Π΄Π°ΠΌΠΏΠ° ΠΊΡƒΡ‡ΠΈ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса, сколько памяти ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚.

НастройтС JVM Π² соотвСтствии с трСбованиями вашСго прилоТСния. Π―Π²Π½ΠΎ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΡƒΡ‡ΠΈ для JVM ΠΏΡ€ΠΈ запускС прилоТСния. ΠŸΡ€ΠΎΡ†Π΅ΡΡ выдСлСния памяти Ρ‚Π°ΠΊΠΆΠ΅ являСтся дорогостоящим, поэтому Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΉ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ объСм памяти для ΠΊΡƒΡ‡ΠΈ. Если Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ, Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с нСбольшого Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΡƒΡ‡ΠΈ с самого Π½Π°Ρ‡Π°Π»Π°, JVM Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ это пространство памяти. Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² памяти выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Java Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ OutOfMemoryError ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация для обнаруТСния ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ, запуститС процСсс с –XX:HeapDumpOnOutOfMemory ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаст Ρ„Π°ΠΉΠ» Π΄Π°ΠΌΠΏΠ° ΠΊΡƒΡ‡ΠΈ, ΠΊΠΎΠ³Π΄Π° эта ошибка ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·.

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

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

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

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