Sobes.tech
Middle+

Dartтагы калдык жыйноочу кандай өзгөчөлүктөргө ээ?

sobes.tech AI

AIден жооп

Дартта чогултуучу жыйноочу поколенческая жыйноо (Generational Garbage Collection) алгоритмин колдонуп жатат.

Негизги өзгөчөлүктөрү:

  • Поколендер (Generations): Объекттер эки поколенге бөлүнөт:
    • Жашоочу жыйноо (Young Generation): Мында жаңы объекттер түзүлөт. Бул жыйноо тез жана көбүрөөк болот, анткени көпчүлүк объекттер түзүлгөндөн кийин өлөт.
    • Эски жыйноо (Old Generation): Бир нече жыйноо циклдеринен кийин "жашаган" объекттер бул жерге которулат. Бул жыйноо азыраак жана узак убакыт алат.
  • Өмүрү өткөн объекттер (Survivors): Жашоочу жыйноодогу объекттер, башка объекттердин шилтемеси болсо, "өмүрү өткөн" деп эсептелет жана эски жыйноого которулушу мүмкүн.
  • Жыйноо этаптары:
    • Майор GC (Minor GC): Жылдам жыйноо, ал гана жашоочу жыйноодогу объекттерди камтыйт.
    • Мажор GC (Major GC): Узак жыйноо, эски жыйноодогу объекттерди текшерет.
  • Поколенческая жыйноонун артыкчылыктары:
    • Кыска мөөнөттүү объекттер үчүн оптималдаштыруу: Көпчүлүк кала турган отпаддар жашоочу жыйноодон тез арада алынып салынат.
    • Токтотуу убактысын кыскартуу: Жыш жана кыска токтотуулар жашоочу жыйноо үчүн аз байкалат, ал эми сейрек жана узак токтотуулар бүткүл жыйноо үчүн көбүрөөк байкалат.
  • Dart VM жыйноочу:
    • Коопсуздук (хибрид) ыкманы колдонуп, жашоочу жыйноо үчүн копирование (copying collector) жана эски жыйноо үчүн белгилөө жана жылдыруу (mark-and-sweep/compact) ыкмаларын колдонуп жатат.
    • Жашоочу жыйноодо копирүүчү жыйноочу тез жана натыйжалуу жашоочу объекттерди башка жаатка которот.
    • Эски жыйноодо белгилөө жана жылдыруу жашоочу объекттерди табат жана аларды фрагментацияны жоюу үчүн которот.
    • Бул пайдалануу интерфейси тизмесинен көз карандысыз иштейт, блоктоолорду минималдаштырат.
// Жашоочу жыйноого кирүүчү объекттердин түзүлүшү мисалы
class MyClass {
  String name;
  MyClass(this.name);
}

void main() {
  var obj1 = MyClass("Object 1"); // Жашоочу жыйноого түзүлөт
  var obj2 = MyClass("Object 2"); // Жашоочу жыйноого түзүлөт

  // Эгер объекттер шилтемелер менен кармалбаса, алар жыйналышы мүмкүн
  // кийинки жашоочу жыйноо учурунда.

  // Эгер бул объекттер узак жашаса жана шилтемелер болсо,
  // алар эски жыйноого которулушу мүмкүн.
}