Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 86

Автор Π‘Π΅Ρ€Ρ‚Ρ€Π°Π½ ΠœΠ΅ΠΉΠ΅Ρ€

АвтоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ

Ни ΠΎΠ΄ΠΈΠ½ ΠΈΠ· рассмотрСнных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π½Π΅ являСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. ΠžΠ±Ρ‰Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ языка.

ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ автоматичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

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

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ обсуТдСниС достаточно ясно ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ, ΠΊΠ°ΠΊ Π²Π°ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. По словам ΠœΠΈΡ…Π°ΠΈΠ»Π° Π¨Π²Π΅ΠΉΡ†Π΅Ρ€Π° (Michael Schweitzer) ΠΈ Π›Π°ΠΌΠ±Π΅Ρ€Ρ‚Π° Π‘Ρ‚Ρ€Π΅Ρ‚Ρ€Π° (Lambert Strether): "ОО-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Π΅Π· автоматичСского управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ скороварка Π±Π΅Π· ΠΊΠ»Π°ΠΏΠ°Π½Π° бСзопасности: Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΎΠ½Π° взорвСтся!" (Из [Schweitzer 1991])

МногиС срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Ρ€Π°Π·Ρ€Π΅ΠΊΠ»Π°ΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ ОО, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свойства, Π΄Π΅Π»Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΡ… ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд. Они Π΄Π°ΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Π΅Π·ΡƒΠΏΡ€Π΅Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΌΠ°Π»Ρ‹Ρ… систСмах. Но Π² ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π²Ρ‹ рискуСтС Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² срСдС, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ достигнСт Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ совСт:

ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ОО-срСды - ΠΈΠ»ΠΈ просто компилятора ОО-языка - для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡŒΡ‚Π΅ вашС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΌΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ автоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.

Π”Π²Π° Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΏΡ€ΠΈ автоматичСском ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ: подсчСт ссылок ΠΈ сборка мусора. Они ΠΎΠ±Π° достойны внимания, хотя Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΡ‰Π½Π΅Π΅ ΠΈ ΠΎΠ±Ρ‰Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ.

Π§Ρ‚ΠΎ Π² точности понимаСтся ΠΏΠΎΠ΄ восстановлСниСм?

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

[x]. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΊ постоянно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΌΡƒ "списку свободных ячССк", Π² Π΄ΡƒΡ…Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ, использованной ΠΏΡ€ΠΈ рассмотрСнии ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ инструкция создания ( create x... ) Π²Π½Π°Ρ‡Π°Π»Π΅ обратится ΠΊ этому списку для выдСлСния памяти Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Волько Ссли этот список пуст ΠΈΠ»ΠΈ Π½Π΅Ρ‚ подходящих ячССк, инструкция запросит ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ список свободной памяти.

[x]. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ являСтся Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ памяти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ аспСкты ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ: для избСТания ΠΏΠ΅Ρ€Π΅ΠΈΠ·Π±Ρ‹Ρ‚ΠΊΠ° систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΡƒΡ‚ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² спискС, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС ΠΏΡ€ΠΈ достиТСнии ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Π°. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ восстановлСниСм.

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

Π‘Ρ‹Π»ΠΎ Π±Ρ‹ большим Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ автоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π² ситуации лондонской слуТбы скорой ΠΏΠΎΠΌΠΎΡ‰ΠΈ, - посягая Π±Π΅Π· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ Π±Π°ΠΉΡ‚ Π·Π° Π±Π°ΠΉΡ‚ΠΎΠΌ Π½Π° Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΏΠΎΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ памяти ΠΈ Π½Π΅ закончится катастрофой.

ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ ссылок

ΠŸΡ€ΠΎΡΡ‚Π°Ρ идСя Π»Π΅ΠΆΠΈΡ‚ Π² основС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ - подсчСта ссылок. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ число сдСланных Π½Π° Π½Π΅Π³ΠΎ ссылок. Когда ΠΎΠ½ΠΎ становится Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡ‚ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ слоТно для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ языка. НуТно ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ число ссылок любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, присоСдинСния ΠΈ отсоСдинСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π›ΡŽΠ±Π°Ρ опСрация, ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π°Ρ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ число ссылок, дСлая Π΅Π³ΠΎ Ρ€Π°Π²Π½Ρ‹ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅. Π’ частности, Ρ‚Π°ΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ с инструкциСй создания create a , ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅ΠΉ Π΅Π³ΠΎ ΠΊ Π°. (Битуация с инструкциСй clone Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ Π±ΡƒΠ΄Π΅Ρ‚ обсуТдСна ΠΏΠΎΠ·ΠΆΠ΅.)

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


A1 L b := a (присваиваниС).

A2 L x.r(..., a, ...) , Π³Π΄Π΅ r - нСкоторая ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°).


Π›ΡŽΠ±Π°Ρ опСрация, ΠΎΡ‚ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π°Ρ ссылку ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° О, Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ число ссылок О Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ отсоСдинСния:

[x]. (D1) Π›ΡŽΠ±ΠΎΠ΅ присваиваниС a := b. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π°Ρ опСрация (А1) для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, присоСдинСнного ΠΊ b. (ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли b Ρ‚Π°ΠΊΠΆΠ΅ присоСдинСн ΠΊ О, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ счСтчик О, Ρ‚.Π΅. ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π±Π΅Π· измСнСния - приятный Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.)

[x]. (D2) Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΈΠ΄Π° x.r(..., a, ...). (Если a встрСчаСтся Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π° Π² спискС фактичСских Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ отсоСдинСниСм ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ a.)

ПослС Ρ‚Π°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, рСализация Π΄ΠΎΠ»ΠΆΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, Π½Π΅ являСтся Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика, Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ, Ссли Π΄Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡ‚ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ рассмотрим ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ с clone, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΡƒΡŽ особого внимания. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ a := clone (b) создаСт копию ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠžΠ’, присоСдинСнного ΠΊ b, Ссли ΠžΠ’ сущСствуСт. Π’Π½ΠΎΠ²ΡŒ созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ОA присоСдиняСтся ΠΊ a. Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ ссылок ОA инициализируСтся Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ, СстСствСнно, Π½Π΅ копируя счСтчик ΠžΠ’. Если ΠžΠ’ ΠΈΠΌΠ΅Π΅Ρ‚ нСпустыС ссылочныС поля, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ слСдуСт ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ счСтчик ссылок ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, присоСдинСнного ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ссылочному полю, Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ поля ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ присоСдинСны ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.

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

Но Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π΄Π΅Π»Π°ΡŽΡ‰Π°Ρ подсчСт ссылок, ΠΊ соТалСнию, ΠΌΠ°Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ. ("К соТалСнию", ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эта Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠ°.) ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° связана с цикличСскими структурами. Рассмотрим Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ€Π°Π· наш основной ΠΏΡ€ΠΈΠΌΠ΅Ρ€ структуры с взаимосвязанными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ:

Рис. 9.14.  ΠΠ΅ΡƒΠ΄Π°Π»ΡΠ΅ΠΌΠ°Ρ ΠΏΡ€ΠΈ подсчСтС ссылок цикличСская структура

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ О1, О2 ΠΈ О3 содСрТат цикличСскиС ссылки Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°. Допустим, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Π½Π΅ структуры ΠΊΡ€ΠΎΠΌΠ΅ О, содСрТащих ссылки Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² структуры. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ счСтчик ссылок ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ допустим, Ρ‡Ρ‚ΠΎ ссылка ΠΎΡ‚ О ΠΊ О1 ΠΎΡ‚Ρ€Π΅Π·Π°Π½Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° вызываСмая с Ρ†Π΅Π»ΡŒΡŽ О выполняСт ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ:


Π°:=void


Π’ΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ О1, О2, О3 станут нСдостиТимыми, Π½ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ подсчСта ссылок Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ эту ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ: Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Π°Ρ инструкция ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ счСтчик ссылок О1 Π΄ΠΎ Ρ‚Ρ€Π΅Ρ… ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ. Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊΠΈ всСх Ρ‚Ρ€Π΅Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² останутся ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΡ… ΡƒΡ‚ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

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

Π‘Π±ΠΎΡ€ΠΊΠ° мусора

НаиболСС ΠΎΠ±Ρ‰Π΅ΠΉ ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΎΠΉ являСтся лишь автоматичСская сборка мусора ΠΈΠ»ΠΈ просто сборка мусора.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сборки мусора

Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊ мусора (garbage collector) - это функция ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы (runtime system) языка программирования. Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊ мусора выполняСт ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΡŽ нСдостиТимых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡΡΡŒ Π² ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, хотя ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² своСм распоряТСнии Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ срСдства контроля Ρ€Π°Π±ΠΎΡ‚Ρ‹ сборщика.