Π‘Π±ΠΎΡ€ цикличСских ссылок

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ подсчёта ссылок Π² памяти Π²Ρ€ΠΎΠ΄Π΅ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² PHP Ρ€Π°Π½ΡŒΡˆΠ΅, Π½Π΅ ΡΠΏΡ€Π°Π²Π»ΡΠ»ΠΈΡΡŒ с ΡƒΡ‚Π΅Ρ‡ΠΊΠ°ΠΌΠΈ памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈ цикличСскиС ссылки; ΠΎΠ΄Π½Π°ΠΊΠΎ с PHP 5.3.0 Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ языка Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ синхронный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈΠ· исслСдования » Concurrent Cycle Collection in Reference Counted Systems (Π°Π½Π³Π». Β«ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ сбор цикличСских ссылок Π² систСмах подсчёта ссылок»), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

ПолноС описаниС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Ρ€Π°Π·Π΄Π΅Π»Π°, Π½ΠΎ основы Ρ€Π°Π·Π΄Π΅Π» ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚. Π’Π½Π°Ρ‡Π°Π»Π΅ установим Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°. ΠŸΠ΅Ρ€Π²ΠΎΠ΅, PHP ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² памяти ΠΈ Π½Π΅ считаСт мусором ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΡ‚Π° refcount ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎΡΡŒ. Zval-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, количСство ссылок Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΠΎΡΡŒ Π΄ΠΎ нуля, освобоТдаСтся ΠΈΠ· памяти. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ цикличСскиС ссылки становятся мусорными, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… со ссылкой Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π΅ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° refcount Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Π½Π΅ ΠΎΠ±Π½ΡƒΠ»ΠΈΠ»ΠΎΡΡŒ. Π’Ρ‚ΠΎΡ€ΠΎΠ΅, PHP ΡƒΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ мусорныС части Π² мусорных Ρ†ΠΈΠΊΠ»Π°Ρ… ΠΏΡƒΡ‚Ρ‘ΠΌ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ количСства ссылок Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Π² ΠΊΠ°ΠΊΠΈΡ… zval-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… количСство ссылок стало Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ.

Алгоритм сборки мусора

Алгоритм ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΡ€Π½ΠΈ β€” zval-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ β€” Π² Β«ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€Β» ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΡ€Π½ΠΈ Β«Ρ„ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹ΠΌΠΈΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ мусорных Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ счётчика ссылок. Алгоритм слСдит ΠΈ Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ мусорный ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΏΠΎΠΏΠ°Π΄Π°Π» Π² Π±ΡƒΡ„Π΅Ρ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сборки мусора для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ zval-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±ΡƒΡ„Π΅Ρ€Π° стартуСт, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ заполняСтся. ГрафичСски ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ шаг A Π½Π° рисункС Π²Ρ‹ΡˆΠ΅.

На шагС B Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ выполняСт поиск Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΌΡƒ ΠΊΠΎΡ€Π½ΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ количСство ссылок Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΡ€Π½ΠΈ «сСрыми». На шагС C Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ снова выполняСт поиск Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ ΠΎΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Ρ‰Ρ‘ Ρ€Π°Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ количСство ссылок для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ zval-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Алгоритм ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΡ€Π½ΠΈ с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ количСством ссылок Β«Π±Π΅Π»Ρ‹ΠΌΠΈΒ» (Π½Π° рисункС β€” синим). А Ссли количСство ссылок Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ большС нуля, начиная с этого корня поиск ΠΈΠ΄Ρ‘Ρ‚ Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ с ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ количСства ссылок Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΎΠΉ ΠΊΠΎΡ€Π½Π΅ΠΉ Β«Ρ‡Π΅Ρ€Π½Ρ‹ΠΌΠΈΒ». На послСднСм шагС, D, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΈ удаляСт ΠΈΠ· Π½Π΅Π³ΠΎ ΠΊΠΎΡ€Π½ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Алгоритм Π·Π°ΠΎΠ΄Π½ΠΎ провСряСт, ΠΊΠ°ΠΊΠΈΠ΅ zval-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ шагС ΠΎΠ½ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΠ» Β«Π±Π΅Π»Ρ‹ΠΌΠΈΒ». ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Β«Π±Π΅Π»Ρ‹ΠΉΒ» zval-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ освобоТдаСтся ΠΈΠ· памяти.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ прСдставлСниС ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, вСрнёмся ΠΊ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ интСгрируСтся с PHP. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ сборщик мусора PHP Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ zend.enable_gc Π² Ρ„Π°ΠΉΠ»Π΅ php.ini Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сборку мусора.

ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΠΎΠΌ сборщикС мусора, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска цикличСских ссылок выполняСтся послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ наполнСния ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π°. Ѐиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° равняСтся 10 000 Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠΎΡ€Π½Π΅ΠΉ, хотя Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ измСняСтся ΠΏΡƒΡ‚Ρ‘ΠΌ измСнСния значСния константы GC_THRESHOLD_DEFAULT Π² Ρ„Π°ΠΉΠ»Π΅ Zend/zend_gc.c исходного ΠΊΠΎΠ΄Π° PHP ΠΈ пСрСсборки PHP. ΠŸΡ€ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ сборщикС мусора Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска цикличСских ссылок Π½Π΅ запускаСтся. Однако Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ всё Ρ€Π°Π²Π½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΡ€Π½ΠΈ, нСзависимо ΠΎΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° сборки мусора Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

PHP ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ запись Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠΎΡ€Π½Π΅ΠΉ, Ссли ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ заполнится ΠΏΡ€ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ сборки мусора. Алгоритм Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ записал Π² Π±ΡƒΡ„Π΅Ρ€. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли ΠΊΠΎΡ€Π½ΠΈ окаТутся мусором с цикличСскими ссылками, ΠΎΠ½ΠΈ Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ памяти, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ PHP Π½Π΅ очистит ΠΈΡ….

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° постоянной записи ΠΊΠΎΡ€Π½Π΅ΠΉ Π² Π±ΡƒΡ„Π΅Ρ€ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ сборки мусора состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΡ€Π½ΠΈ быстрСС, Ρ‡Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° удаётся Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΡ€Π΅Π½ΡŒ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ Π»ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сборки мусора. Однако сам ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сборки мусора ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠ½ΠΎΠ³Π΄Π° Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ΠšΡ€ΠΎΠΌΠ΅ измСнСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ zend.enable_gc, доступСн запуск ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° сборки мусора Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ gc_enable() ΠΈ остановка ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ gc_disable(). Π’Ρ‹Π·ΠΎΠ² этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄Π°Ρ‘Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ эффСкт, Ρ‡Ρ‚ΠΎ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π² настройках ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ сборка мусорных Ρ†ΠΈΠΊΠ»ΠΎΠ², Π΄Π°ΠΆΠ΅ Ссли ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ Π΅Ρ‰Ρ‘ Π½Π΅ заполнился. Для этого Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ gc_collect_cycles(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство цикличСских ссылок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ собрал Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ.

Бмысл Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° сборки мусора, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ запуска ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° состоит Π² Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… частСй прилоТСния ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° автоматичСский запуск ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° сборки мусора Π½Π΅ Π½ΡƒΠΆΠ΅Π½. ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сборщика мусора Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… частях прилоТСния создаёт риск ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΡ€Π½ΠΈ Π½Π΅ помСстятся Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ gc_disable() Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ gc_collect_cycles(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, риск ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΠ·-Π·Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠΎΡ€Π½Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡƒΠΆΠ΅ записал Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€. Π­Ρ‚ΠΎ очистит Π±ΡƒΡ„Π΅Ρ€ ΠΈ даст большС мСста для хранСния ΠΊΠΎΡ€Π½Π΅ΠΉ, ΠΏΠΎΠΊΠ° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сбора мусорных Ρ†ΠΈΠΊΠ»ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½.

οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 3 notes

up
17
Dallas ΒΆ
8 years ago
After testing, breaking up memory intensive code into a separate function allows the garbage collection to work.

For example the original code was like:-
while(true){
   //do memory intensive code
}

can be turned into something like:-
function intensive($parameters){
   //do memory intensive code
}

while(true){
   intensive($parameters);
}
up
15
Yousha dot A at Hotmail dot com ΒΆ
9 years ago
── Unused Objects ─── ─ In use Objects
↓                    ↓               ↓
 _____________________________________
 |β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘|β–ˆβ–ˆβ– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– |
 |β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘|β–ˆβ–ˆβ– β– β– β– β– β– β– β– β– β– β– β– β– β– β– β– |
Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―
          β–²                  β–²
     Unreferenced        Referenced
       Objects             Objects

β–ˆ Memory leak
up
10
Yousha dot A at Hotmail dot com ΒΆ
11 years ago
Memory leak: meaning you keep a reference to it thus preventing the GC from collecting it.