Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ 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 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаст Ρ„Π°ΠΉΠ» Π΄Π°ΠΌΠΏΠ° ΠΊΡƒΡ‡ΠΈ, ΠΊΠΎΠ³Π΄Π° эта ошибка ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Π Π°Π·Π²Π΅ΠΈΠ²Π°Π΅ΠΌ ΠΌΠΈΡ„Ρ‹ ΠΎΠ± ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² JVM

Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π€ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° памяти JVM

Π‘Π½Π°Ρ‡Π°Π»Π° Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° структуру памяти JVM. Π­Ρ‚Π° структура примСняСтся начиная с JDK 11. Π’ΠΎΡ‚ какая ΠΏΠ°ΠΌΡΡ‚ΡŒ доступна процСссу JVM, ΠΎΠ½Π° выдСляСтся ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой:

Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π€ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹

Π­Ρ‚ΠΎ нативная ΠΏΠ°ΠΌΡΡ‚ΡŒ, выдСляСмая ОБ, ΠΈ Π΅Ρ‘ Ρ€Π°Π·ΠΌΠ΅Ρ€ зависит ΠΎΡ‚ систСмы, процСссор ΠΈ JRE. КакиС области ΠΈ для Ρ‡Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹?

ΠšΡƒΡ‡Π° (heap)

Π—Π΄Π΅ΡΡŒ JVM Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ динамичСскиС Π΄Π°Π½Π½Ρ‹Π΅. Π­Ρ‚ΠΎ самая крупная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Π² Π½Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сборщик мусора. Π Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΡƒΡ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π»Π°Π³ΠΎΠ² Xms (Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€) ΠΈ Xmx (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€). ΠšΡƒΡ‡Π° Π½Π΅ пСрСдаётся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, какая-Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ рСзСрвируСтся Π² качСствС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ пространства, Π·Π° счёт ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΡƒΡ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ расти. ΠšΡƒΡ‡Π° дСлится Π½Π° пространства Β«ΠΌΠΎΠ»ΠΎΠ΄ΠΎΠ³ΠΎΒ» ΠΈ «старого» поколСния.

Π‘Ρ‚Π΅ΠΊΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² исполнСния

ΠœΠ΅Ρ‚Π°ΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ

КСш кода

Π—Π΄Π΅ΡΡŒ компилятор Just In Time (JIT) Ρ…Ρ€Π°Π½ΠΈΡ‚ скомпилированныС Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ приходится часто ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ JVM ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΊΠΎΠ΄, скомпилированный JIT-компилятором, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΎΠ½ ΡƒΠΆΠ΅ прСдставлСн Π² Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΈ Π·Π°ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ Π² этой области памяти.

ΠžΠ±Ρ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

Π—Π΄Π΅ΡΡŒ хранится Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для Π»ΡŽΠ±Ρ‹Ρ… ΠΎΠ±Ρ‰ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π­Ρ‚Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти загруТаСтся ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой лишь ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСсса.

ИспользованиС памяти JVM: стСк ΠΈ ΠΊΡƒΡ‡Π°

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ исполняСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ самыС Π²Π°ΠΆΠ½Ρ‹Π΅ части памяти. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π½ΠΈΠΆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Он Π½Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния коррСктности, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²Ρ€ΠΎΠ΄Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ. Π•Π³ΠΎ Π·Π°Π΄Π°Ρ‡Π° β€” Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ использованиС стСка ΠΈ ΠΊΡƒΡ‡ΠΈ.

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ исполняСтся Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ стСк ΠΈ ΠΊΡƒΡ‡Π°:

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ JVM: сборка мусора

Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрёмся с автоматичСским ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΡƒΡ‡Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ³Ρ€Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ прилоТСния. Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° пытаСтся Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² ΠΊΡƒΡ‡Π΅ большС памяти, Ρ‡Π΅ΠΌ доступно (Π² зависимости ΠΎΡ‚ значСния Xmx ), ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ошибки Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти.

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

Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π€ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹

Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊ мусора Π² JVM ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π°:

Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊ мусора Mark & Sweep

JVM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π΅ΠΌΠΎΠ½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ„ΠΎΠ½Π΅ для сборки мусора. Π­Ρ‚ΠΎΡ‚ процСсс запускаСтся ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… условий. Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊ Mark & Sweep ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Π΄Π²Π° этапа, ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ, Π² зависимости ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π€ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹

JVM ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π½Π° Π²Ρ‹Π±ΠΎΡ€ нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сборки мусора, ΠΈ Π² зависимости ΠΎΡ‚ вашСго JDK ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΅Ρ‰Ρ‘ большС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сборщик Shenandoah Π² OpenJDK). Авторы Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ стрСмятся ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ цСлям:

Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊΠΈ Π² JDK 11

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

Π’Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Π²Ρ‹Π±Ρ€Π°Π½ сборщик, Π² JVM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Π²Π° Π²ΠΈΠ΄Π° сборки β€” младший ΠΈ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ сборщик.

Младший сборщик

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

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ процСсс Ρ€Π°Π±ΠΎΡ‚Ρ‹ этого сборщика:

Π‘Ρ‚Π°Ρ€ΡˆΠΈΠΉ сборщик

Π‘Π»Π΅Π΄ΠΈΡ‚ Π·Π° чистотой ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ пространства старого поколСния (Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ). ЗапускаСтся ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… условий:

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

ΠœΡ‹ рассмотрСли структуру ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ JVM. Π­Ρ‚ΠΎ Π½Π΅ ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ, ΠΌΡ‹ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ слоТных концСпциях ΠΈ способах настройки ΠΏΠΎΠ΄ особыС сцСнарии использования. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ здСсь.

Но для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° JVM-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² (Java, Kotlin, Scala, Clojure, JRuby, Jython) этого ΠΎΠ±ΡŠΡ‘ΠΌΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ достаточно. НадСюсь, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ смоТСтС ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ качСствСнный ΠΊΠΎΠ΄, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ прилоТСния, избСгая Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΡƒΡ‚Π΅Ρ‡ΠΊΠΎΠΉ памяти.

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

РаспрСдСлСниС памяти Π² 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 Π² JIRA

Рассмотрим Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ настройку Π² Ρ€Π°Π±ΠΎΡ‚Π΅ Jira Service Desk.

По ΠΌΠ΅Ρ€Π΅ увСличСния числа сотрудников, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² JIRA, Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ обращСния ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π­Ρ‚ΠΎ связанно с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Jira Service Desk написан Π½Π° JAVA. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ JAVA ΠΏΠΎ памяти ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² АдминистрированиС β€” БистСма β€” БистСмная информация β€” Бтатистика памяти Java Virtual Machine

Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π€ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΎ врСмя инсталляции ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° для JAVA Π²Ρ‹Π΄Π΅Π»Π΅Π½ ТСстко объСм памяти Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 384 ΠœΠ‘ Π΄ΠΎ 768 ΠœΠ‘.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Π΅ /opt/atlassian/jira/bin/setenv.sh

Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π€ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹

Учитывая, Ρ‡Ρ‚ΠΎ Π½Π° этапС создания Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, ΠΌΡ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΠ»ΠΈ сСрвСру 8 Π“Π± памяти, Ρ‚ΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ Ρ„Π°ΠΉΠ» ΠΈ Π΄Π°Π΄ΠΈΠΌ JAVA максимум 7 Π“Π±. ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ

ΠΈ пСрСйдя Π² Ρ€Π΅ΠΆΠΈΠΌ рСдактирования Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ Π½Π° ΠΊΠ»Π°Π²ΠΈΡˆΡƒ A ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ JVM_MINIMUM_MEMORY Π½Π° 1024m, Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ JVM_MAXIMUM_MEMORY Π½Π° 7168m.
ПослС Ρ‡Π΅Π³ΠΎ Π½Π°ΠΆΠ°Π² Π½Π° ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ESC, Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠ· Ρ€Π΅ΠΆΠΈΠΌΠ° рСдактирования ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΡ… Ρ„Π°ΠΉΠ»Π° сохранив измСнСния ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ :wq!

Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π€ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹

Для вступлСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² силу, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ слуТбу jira ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ

доТидаСмся остановки ΠΈ запускаСм слуТбу

ΠœΠΈΠ½ΡƒΡ‚ Ρ‡Π΅Ρ€Π΅Π· 3-5 ΠΌΠΈΠ½ΡƒΡ‚ Π·Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² АдминистрированиС β€” БистСма β€” БистСмная информация β€” Бтатистика памяти Java Virtual Machine ΠΈ Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ. МоТно Π·Π°ΠΎΠ΄Π½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ очистку памяти ΠΎΡ‚ β€˜ΠΌΡƒΡΠΎΡ€Π°β€˜ Π½Π°ΠΆΠ°Π² Π½Π° Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ garbage collection.

Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π€ΠΎΡ‚ΠΎ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ java ΠΌΠ°ΡˆΠΈΠ½Ρ‹

Π‘Ρ€Π°Π·Ρƒ почувствуйтС ΠΊΠ°ΠΊ JIRA стала ΡˆΡƒΡΡ‚Ρ€Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

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

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

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