Sobes.tech
Middle

Dartтагы калдык жыйгыч жөнүндө эмне билесиң?

sobes.tech AI

AIден жооп

Dart біржолғы қоқыс жинағышты пайдаланады және бұл ұрпақтық қоқыс жинау негізделген.

Негізгі ерекшеліктер:

  • Ұрпақтық жинау: Объектілер екі ұрпаққа бөлінеді:
    • Жас ұрпақ: Жаңа және қысқа өмір сүретін объектілер. Жиі жиналады.
    • Ескі ұрпақ: Ұзақ өмір сүретін объектілер, бірнеше жас ұрпақ жинауынан өткен. Аз жиі жиналады.
  • Stop-the-World: Қоқыс жинауды орындау үшін бағдарламаның орындалуын тоқтату керек (Dart Isolates). Алайда, біржолақты және оңтайландырылған болғандықтан, кідірістер минималды.
  • Mark-and-Sweep: Ескі ұрпақта Mark-and-Sweep алгоритмі пайдаланылады. Алдымен қол жетімді объектілер белгіленеді, содан кейін қол жетімсіздер жойылады. Жас ұрпақта Copying Collector алгоритмі пайдаланылады, ол тірі объектілерді жылдам басқа жады кеңістігіне көшіреді.
  • Циклдар жоқ: Дамытушы қолмен жадыны басқаруы немесе GC-ны шақыруы қажет емес. Жүйе автоматты түрде жасайды.
  • Оптимизациялар: Функцияларды inline ету, типтерді мамандандыру және объектілерді стекке бөлу, бұл жинағыштың жүктемесін азайтады.

Мысал ретінде, жаңа объект құру:

// Жас ұрпақ жадысында жаңа объект құру
var myObject = MyClass();

Егер myObject ұзақ уақыт жадыда қалса және қол жетімді болса, ол уақыт өте келе "ескі" ұрпаққа көшіріледі. Егер ол қол жетімсіз болса, жинағыш оны ерте немесе кешіктірмей босатады.

// myObject енді қол жетімді емес, оны жинағыш жинай алады
myObject = null;

Маңызды, Dart-тың жинағышы тиімді, бірақ ол ескі объектілерге күшті сілтемелерді сақтау салдарынан пайда болатын жады ағып кетулеріне қарсы емдеу емес (мысалы, тоқтатылмаған жазылулар).