πŸ“•
Golang
  • БобСсСдованиС ΠΏΠΎ golang
  • Вопросы собСсСдования
    • Бписок вопросов МВБ
    • Бписок вопросов
    • Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ вопросы ΠΏΠΎ Golang
    • Go. ΠŸΡ€ΠΎΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ 25 основных вопросов собСсСдования
    • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ
    • Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
    • ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ
    • Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹
    • ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ синхронизации
    • ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ
    • Go: ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ привязки ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ Π² ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ΅
    • ΠšΠ°Π½Π°Π»Ρ‹
    • GC
  • спСцификация
    • БпСцификация Go: прСобразования Π² ΠΈ ΠΈΠ· строкового Ρ‚ΠΈΠΏΠ°
    • ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠΎΠ² (type switch)
    • for утвСрТдСния (for statements)
    • for утвСрТдСния с range условиСм
    • go утвСрТдСния (go statements)
    • select утвСрТдСния (select statements)
    • return утвСрТдСния (return statements)
    • continue утвСрТдСния (continue statements)
    • goto утвСрТдСния (goto statements)
    • fallthrough утвСрТдСния (fallthrough statements, утвСрТдСния "ΠΏΡ€ΠΎΠ²Π°Π»Π°")
    • defer утвСрТдСния (defer statements)
    • встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, функция close
    • Π΄Π»ΠΈΠ½Π° ΠΈ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ
    • аллокация, созданиС срСзов (slice), ΠΊΠ°Ρ€Ρ‚ (map) ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ²
    • Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² срСзы ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ срСзов
    • ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов ΠΊΠ°Ρ€Ρ‚Ρ‹
    • ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠ°Π½ΠΈΠΊΠΈ
    • Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° (bootstrapping)
    • ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹
    • инициализация ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
    • инициализация ΠΏΠ°ΠΊΠ΅Ρ‚Π°
    • Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
    • ошибки
    • ΠΏΠ°Π½ΠΈΠΊΠ° Π²ΠΎ врСмя выполнСния (run-time panic)
  • Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ go
    • эффСктивный go
    • 50 ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠΎΠ² go
    • Go: распространСнныС Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹
    • Визуализация concurrency Π² Go с WebGL
  • трСбования для Ρ€Π°Π±ΠΎΡ‚Ρ‹
    • Бписок Π½Π°Π²Ρ‹ΠΊΠΎΠ²
  • habr
    • Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Go ΠΏΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°ΠΌ
    • Go: ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ привязки ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ Π² ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ΅
  • NP
    • ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ с интСрфСйсами Π² Golang
    • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Golang
    • Π’Π»Π°Π΄Π΅Π΅ΡˆΡŒ merge β€Š-β€Š освой ΠΈ rebase
  • ProgLib
    • Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹
  • Untitled
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ
    • Go: Π”ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ вмСсто ΠΊΠΎΠΏΠΈΠΈ ΠΌΠΎΠ΅ΠΉ структуры?
  • ПолСзняшки
    • Using PostgreSQL JSONB with Go
Powered by GitBook
On this page

Was this helpful?

  1. Вопросы собСсСдования

GC

PreviousΠšΠ°Π½Π°Π»Ρ‹NextБпСцификация Go: прСобразования Π² ΠΈ ΠΈΠ· строкового Ρ‚ΠΈΠΏΠ°

Last updated 4 years ago

Was this helpful?

Визуализация выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠšΠΎΡ€Π½Π΅Π²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Go:

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Π‘Ρ‚Π΅ΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½

ΠŸΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹ запуска GC

  • пСриодичСски ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° sysmon , Ссли ΠΏΡ€ΠΎΡˆΠ»ΠΎ достаточно ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с послСднСго запуска

  • послС выдСлСния памяти, Ссли Π²Ρ‹Π΄Π΅Π»Π΅Π½ большой Span ΠΈΠ»ΠΈ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ быстро

  • ΠΏΡ€ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ runtime.GC()

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ сборщик мусора для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ дСсятилСтия ΠΌΡ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ»ΠΈΡΡŒ ΠΊ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ, написанному нСсколько дСсятилСтий Π½Π°Π·Π°Π΄. Новый сборщик мусора Π² Go являСтся ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Ρ‹ΠΌ (concurrent), Ρ‚Ρ€Π΅Ρ…Ρ†Π²Π΅Ρ‚Π½Ρ‹ΠΌ (tri-color), mark-sweep сборщиком, идСя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π±Ρ‹Π»Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° . Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ Ρ‚Π°ΠΊ сильно нСсоотвСтствуСт Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ соврСмСнных сборщиков мусора «энтСрпрайз»-уровня, ΠΈ ΠΌΡ‹ считаСм, Ρ‡Ρ‚ΠΎ это Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ для соврСмСнного ΠΆΠ΅Π»Π΅Π·Π° ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΠΏΠ°ΡƒΠ·Π°ΠΌ Π½Π° Π½ΠΎΠ²ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π΅. Π’ Ρ‚Ρ€Π΅Ρ…Ρ†Π²Π΅Ρ‚Π½ΠΎΠΌ сборщикС мусора, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½, ΠΊΠ°ΠΊ Π±Π΅Π»Ρ‹ΠΉ, сСрый ΠΈΠ»ΠΈ Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΉ, ΠΈ ΠΌΡ‹ рассматриваСм ΠΊΡƒΡ‡Ρƒ (heap) ΠΊΠ°ΠΊ Π³Ρ€Π°Ρ„ связанных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° GC всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±Π΅Π»Ρ‹Π΅. GC ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ всё ΠΊΠΎΡ€Π½Π΅Π²Ρ‹Π΅ ΡƒΠ·Π»Ρ‹ (roots) Π³Ρ€Π°Ρ„Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ доступными ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ β€” это Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² стСкС β€” ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΠΈΡ… сСрыми. Π—Π°Ρ‚Π΅ΠΌ GC Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ сСрый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ сканируСт Π΅Π³ΠΎ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Если скан ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Π΅Π»Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ сСрым. Π­Ρ‚ΠΎΡ‚ процСсс повторяСтся, ΠΏΠΎΠΊΠ° Π½Π΅ останСтся сСрых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ всС Π±Π΅Π»Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ нСдостиТимыми ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹. Π­Ρ‚ΠΎ всё происходит ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ (mutator), ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π΅ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сборщик. Из этого слСдуСт, Ρ‡Ρ‚ΠΎ ΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π±Π΅Π»Ρ‹ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сборщик мусора Π½Π΅ потСрял слСд ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Ρ‚ΠΎΠΉ части ΠΊΡƒΡ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ ΡƒΠΆΠ΅ обошСл. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° это Π·Π°Π΄Π°Ρ‡Π° для Β«Π±Π°Ρ€ΡŒΠ΅Ρ€ΠΎΠ² записи» (write barrier), которая ΠΏΠΎ сути являСтся малСнькой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‰Π΅ΠΉΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€ мСняСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² ΠΊΡƒΡ‡Π΅. Π‘Π°Ρ€ΡŒΠ΅Ρ€ записи Π² Go ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ сСрым ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π±Π΅Π»Ρ‹ΠΌΠΈ, гарантируя, Ρ‡Ρ‚ΠΎ сборщик мусора Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ просканируСт Π΅Π³ΠΎ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ просканированы β€” тонкая Π·Π°Π΄Π°Ρ‡Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ дорогостоящСй ΠΈ слоТной, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€Π°. Для простоты Go 1.5 Π΄Π΅Π»Π°Π΅Ρ‚ максимум Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Π² Ρ„ΠΎΠ½Π΅, Π° ΠΏΠΎΡ‚ΠΎΠΌ приостанавливаСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° совсСм ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ всС ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ сСрыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Найти идСальноС ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ для Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ для этой ΠΏΠ°ΡƒΠ·Ρ‹ ΠΈ для всСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ GC являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ для Go 1.6. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, дьявол кроСтся Π² дСталях. Когда Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ†ΠΈΠΊΠ» GC? ΠšΠ°ΠΊΡƒΡŽ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для принятия этого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ? Как Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ GC ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Go? Как ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€Π° Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° сканированиС ΠΈΡ… стСков? Как ΠΌΡ‹ прСдставляСм Π±Π΅Π»Ρ‹Π΅, сСрыС ΠΈ Ρ‡Π΅Ρ€Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ максимально эффСктивно ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСрыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹? Как ΠΌΡ‹ ΡƒΠ·Π½Π°Ρ‘ΠΌ, Π³Π΄Π΅ ΠΈΡ… ΠΊΠΎΡ€Π½Π΅Π²Ρ‹Π΅ ΡƒΠ·Π»Ρ‹? Как ΠΌΡ‹ ΡƒΠ·Π½Π°Ρ‘ΠΌ, Π³Π΄Π΅ находятся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅? Как ΠΌΡ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ памяти? Как ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ вопросы ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ кСшСй? Насколько большой Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΊΡƒΡ‡Π°? И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅, ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ относящССся ΠΊ аллокациям, ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΊ поиску достиТимых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΊ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Π½ΠΎ основныС вопросы Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Дискуссии ΠΎ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… дСталях ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· этих областСй выходят Π·Π° Ρ€Π°ΠΌΠΊΠΈ этого поста. На Π±ΠΎΠ»Π΅Π΅ высоком ΡƒΡ€ΠΎΠ²Π½Π΅, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ для GC являСтся Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² GC ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠΎΠ² (knobs), ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‚ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΡŽΠ½ΠΈΡ‚ΡŒ GC ΠΏΠΎΠ΄ сСбя, настраивая мноТСство ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠœΠΈΠ½ΡƒΡ Ρ‚ΡƒΡ‚ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‡Π΅Ρ€Π΅Π· 10 Π»Π΅Ρ‚ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ двумя Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ°ΠΌΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π³ΠΎΠ΄, Π²Ρ‹ Π² ΠΈΡ‚ΠΎΠ³Π΅ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚Π΅ Π’Ρ€ΡƒΠ΄ΠΎΠ²Ρ‹ΠΌ Π”ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΎΠΌ Об Использовании ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ GC. Go Π½Π΅ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ этим ΠΏΡƒΡ‚Ρ‘ΠΌ. ВмСсто этого ΠΌΡ‹ Π΄Π°Ρ‘ΠΌ лишь ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΎΠΊ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ GOGC. Π•Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΡƒΡ‡ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° достиТимых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π”Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«100Β» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΡƒΡ‡ΠΈ сСйчас Π½Π° 100% большС (Ρ‚ΠΎΠ΅ΡΡ‚ΡŒ, Π²Π΄Π²ΠΎΠ΅) Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ достиТимых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² послС послСднСго Ρ†ΠΈΠΊΠ»Π° GC. Β«200Β» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΡƒΡ‡ΠΈ Π½Π° 200% большС (Ρ‚ΠΎΠ΅ΡΡ‚ΡŒ, Π² Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π°), Ρ‡Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ количСство Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ GC, ΡƒΠ²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ GOGC. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ GC, ΠΈ Π²Ρ‹ΠΈΠ³Ρ€Π°Ρ‚ΡŒ сСбС ΠΏΠ°ΠΌΡΡ‚ΡŒ β€” ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΠΉΡ‚Π΅ GOGC. Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ количСство памяти удвоится со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΆΠ΅Π»Π΅Π·Π°, простоС ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ GOGC Π²Π΄Π²ΠΎΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ количСство Ρ†ΠΈΠΊΠ»ΠΎΠ² GC Π²Π΄Π²ΠΎΠ΅. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ GOGC ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ понятиСм достиТимых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства достиТимых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ нуТдаСтся Π² Ρ€Π΅Ρ‚ΡŽΠ½ΠΈΠ½Π³Π΅. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ просто ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, нСобрСмСнённая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ дюТин ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠΎΠ², ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΏΠΈΡˆΡƒΡ‰Π°Ρ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ языка ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ„ΠΎΠΊΡƒΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ°, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Ρ„ΠΈΠ΄Π±Π΅ΠΊΠ΅ ΠΎΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅.

ДСйкстрой Π² 1978 Π³ΠΎΠ΄Ρƒ