УпÑавлÑÐ½Ð½Ñ Ð¿Ð°Ð¼âÑÑÑÑ Ð² JavaScript виконÑÑÑÑÑÑ Ð°Ð²ÑомаÑиÑно Ñ Ð½ÐµÐ¿Ð¾Ð¼ÑÑно. Ðи ÑÑвоÑÑÑмо пÑимÑÑиви, обâÑкÑи, ÑÑнкÑÑÑ⦠ÐÑе Ñе Ð·Ð°Ð¹Ð¼Ð°Ñ Ð¿Ð°Ð¼âÑÑÑ.
Ðле Ñо вÑдбÑваÑÑÑÑÑ, коли змÑнна або ÑкийÑÑ Ð¾Ð±âÑÐºÑ Ð±ÑлÑÑе не поÑÑÑбнÑ? Як JavaScript ÑозÑмÑÑ, коли поÑÑÑбно звÑлÑнÑÑи памâÑÑÑ?
ÐоÑÑжнÑÑÑÑ
ÐÑновна конÑепÑÑÑ ÑпÑавлÑÐ½Ð½Ñ Ð¿Ð°Ð¼âÑÑÑÑ Ð² JavaScript â Ñе доÑÑжнÑÑÑÑ.
ÐÑоÑÑÑÑе кажÑÑи, âдоÑÑжнÑâ знаÑÐµÐ½Ð½Ñ â Ñе ÑÑ, ÑÐºÑ ÑкимоÑÑ Ñином доÑÑÑÐ¿Ð½Ñ Ð°Ð±Ð¾ пÑидаÑÐ½Ñ Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑаннÑ. Ðони гаÑанÑовано збеÑÑгаÑÑÑÑÑ Ð² памâÑÑÑ.
-
ÐÑнÑÑ Ð±Ð°Ð·Ð¾Ð²Ð¸Ð¹ набÑÑ Ð´Ð¾ÑÑÐ¶Ð½Ð¸Ñ Ð·Ð° ÑвоÑÑ ÑÑÑÑÑ Ð·Ð½Ð°ÑенÑ, ÑÐºÑ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ видалиÑи Ð·Ñ Ð·ÑозÑмÑÐ»Ð¸Ñ Ð¿ÑиÑин.
ÐапÑиклад:
- ФÑнкÑÑÑ, Ñо виконÑÑÑÑÑÑ Ð·Ð°Ñаз, ÑÑ Ð»Ð¾ÐºÐ°Ð»ÑÐ½Ñ Ð·Ð¼ÑÐ½Ð½Ñ Ñа паÑамеÑÑи.
- ÐнÑÑ ÑÑнкÑÑÑ Ð¿Ð¾ÑоÑного ланÑÑжка Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð¸Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑв, ÑÑ Ð»Ð¾ÐºÐ°Ð»ÑÐ½Ñ Ð·Ð¼ÑÐ½Ð½Ñ Ñа паÑамеÑÑи.
- ÐлобалÑÐ½Ñ Ð·Ð¼ÑннÑ.
- (Ñ Ð¹ деÑÐºÑ ÑнÑÑ, внÑÑÑÑÑнÑ)
Ð¦Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð¼Ð¸ бÑдемо називаÑи коÑенÑ.
-
ÐÑдÑ-Ñке ÑнÑе знаÑÐµÐ½Ð½Ñ Ð²Ð²Ð°Ð¶Ð°ÑÑÑÑÑ Ð´Ð¾ÑÑжним, ÑкÑо воно доÑÑÑпне з коÑÐµÐ½Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ ланÑÑжка поÑиланÑ.
ÐапÑиклад, ÑкÑо в глобалÑнÑй змÑннÑй Ñ Ð¾Ð±âÑкÑ, Ñ Ñей обâÑÐºÑ Ð¼Ð°Ñ Ð²Ð»Ð°ÑÑивÑÑÑÑ, Ñо поÑилаÑÑÑÑÑ Ð½Ð° ÑнÑий обâÑкÑ, Ñей обâÑÐºÑ Ð²Ð²Ð°Ð¶Ð°ÑÑÑÑÑ Ð´Ð¾ÑÑжним. Ð ÑÑ, на ÑÐºÑ Ð²Ñн поÑилаÑÑÑÑÑ, Ñакож доÑÑжнÑ. ÐÐ°Ð»Ñ Ð²Ð¸ познайомиÑеÑÑ Ð· докладними пÑикладами на ÑÑ ÑемÑ.
У ÑÑÑÑÑ JavaScript Ñ Ñоновий пÑоÑеÑ, Ñкий називаÑÑÑÑÑ Ð·Ð±Ð¸ÑÐ°Ð½Ð½Ñ ÑмÑÑÑÑ. ÐÑн конÑÑолÑÑ Ð²ÑÑ Ð¾Ð±âÑкÑи Ñа видалÑÑ ÑÑ, ÑÐºÑ ÑÑали недоÑÑжними.
ÐÑоÑÑий пÑиклад
ÐÑÑ Ð½Ð°Ð¹Ð¿ÑоÑÑÑÑий пÑиклад:
// user Ð¼Ð°Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° обâÑкÑ
let user = {
name: "Ðван"
};
ТÑÑ ÑÑÑÑлка зобÑажÑÑ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° обâÑкÑ. ÐлобалÑна змÑнна "user" поÑилаÑÑÑÑÑ Ð½Ð° обâÑÐºÑ {name: "Ðван"} (ми бÑдемо називаÑи його Ðван Ð´Ð»Ñ ÑÑиÑлоÑÑÑ). ÐлаÑÑивÑÑÑÑ "name" Ðвана збеÑÑÐ³Ð°Ñ Ð¿ÑимÑÑив, ÑÐ¾Ð¼Ñ Ð²Ñн зобÑажений вÑеÑÐµÐ´Ð¸Ð½Ñ Ð¾Ð±âÑкÑа.
ЯкÑо знаÑÐµÐ½Ð½Ñ Ð² змÑннÑй user пеÑепиÑÑÑÑÑÑÑ, поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð²ÑÑаÑаÑÑÑÑÑ:
user = null;
Ð¢ÐµÐ¿ÐµÑ Ðван ÑÑÐ°Ñ Ð½ÐµÐ´Ð¾ÑÑжним. ÐÐµÐ¼Ð°Ñ Ð´Ð¾ÑÑÑÐ¿Ñ Ð´Ð¾ нÑого, Ð½ÐµÐ¼Ð°Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ñ Ð½Ð° нÑого. ÐÑоÑÐµÑ Ð·Ð±Ð¸ÑÐ°Ð½Ð½Ñ ÑмÑÑÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸ÑÑ Ð´Ð°Ð½Ñ Ñа звÑлÑниÑÑ Ð¿Ð°Ð¼âÑÑÑ.
Ðва поÑиланнÑ
Ð¢ÐµÐ¿ÐµÑ ÑÑвÑмо, Ñо ми ÑкопÑÑвали поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð·Ñ Ð·Ð¼ÑÐ½Ð½Ð¾Ñ user Ñ Ð·Ð¼ÑÐ½Ð½Ñ admin:
// user Ð¼Ð°Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° обâÑкÑ
let user = {
name: "Ðван"
};
let admin = user;
ТепеÑ, ÑкÑо ми зÑобимо Ñе Ñаме:
user = null;
â¦Ð¢ÐµÐ¿ÐµÑ обâÑÐºÑ Ð²Ñе Ñе Ñ Ð´Ð¾ÑÑжним ÑеÑез глобалÑÐ½Ñ Ð·Ð¼ÑÐ½Ð½Ñ admin, Ñаким Ñином вÑн залиÑаÑÑÑÑÑ Ñ Ð¿Ð°Ð¼âÑÑÑ. ЯкÑо пеÑепиÑаÑи змÑÐ½Ð½Ñ admin Ñакож, його можна бÑде видалиÑи.
ÐзаÑмозвâÑÐ·Ð°Ð½Ñ Ð¾Ð±âÑкÑи
Ð¢ÐµÐ¿ÐµÑ ÑкладнÑÑий пÑиклад. СÑмâÑ:
function marry(man, woman) {
woman.husband = man;
man.wife = woman;
return {
father: man,
mother: woman
}
}
let family = marry({
name: "Ðван"
}, {
name: "Ðнна"
});
ФÑнкÑÑÑ marry âодÑÑжÑÑâ два обâÑкÑи, даÑÑи Ñм поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¾Ð´Ð¸Ð½ на одного Ñа повеÑÑаÑÑи новий обâÑкÑ, Ñо мÑÑÑиÑÑ ÑÑ
обоÑ
.
ÐÑÑимана ÑÑÑÑкÑÑÑа Ð´Ð°Ð½Ð¸Ñ :
ÐаÑÐ°Ð·Ñ Ð²ÑÑ Ð¾Ð±âÑкÑи доÑÑжнÑ.
Ð¢ÐµÐ¿ÐµÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ð¼Ð¾ два поÑиланнÑ:
delete family.father;
delete family.mother.husband;
ÐедоÑÑаÑнÑо видалиÑи лиÑе одне з ÑÐ¸Ñ Ð´Ð²Ð¾Ñ Ð¿Ð¾ÑиланÑ, оÑкÑлÑки вÑÑ Ð¾Ð±âÑкÑи вÑе одно бÑдÑÑÑ Ð´Ð¾ÑÑжними.
Ðле ÑкÑо видалиÑи обидва, Ñо можна побаÑиÑи, Ñо Ðван бÑлÑÑе не Ð¼Ð°Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ñ Ð½Ð° Ñебе:
ÐÐ¸Ñ ÑÐ´Ð½Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ðµ маÑÑÑ Ð·Ð½Ð°ÑеннÑ. ТÑлÑки Ð²Ñ ÑÐ´Ð½Ñ Ð¼Ð¾Ð¶ÑÑÑ Ð·ÑобиÑи обâÑÐºÑ Ð´Ð¾ÑÑжним. ÐÑже, Ðван заÑаз недоÑÑжний Ñ Ð±Ñде видалений з памâÑÑÑ Ð· ÑÑÑма його даними, ÑÐºÑ Ñакож ÑÑали недоÑÑжними.
ÐÑÑÐ»Ñ Ð·Ð±Ð¸ÑÐ°Ð½Ð½Ñ ÑмÑÑÑÑ:
ÐедоÑÑжний âоÑÑÑÑвâ
Ðожливо, Ñо веÑÑ âоÑÑÑÑвâ взаÑмоповâÑÐ·Ð°Ð½Ð¸Ñ Ð¾Ð±âÑкÑÑв ÑÑане недоÑÑжним Ñ Ð²Ð¸Ð´Ð°Ð»Ð¸ÑÑÑÑ Ð· памâÑÑÑ.
ЯкÑо обâÑÐºÑ Ñакий Ñамий, Ñк Ñ Ð²Ð¸Ñе, ÑодÑ:
family = null;
ÐÐ¾Ð´Ð°Ð½Ð½Ñ Ð² памâÑÑÑ ÑÑÐ°Ñ Ñаким:
Цей пÑиклад демонÑÑÑÑÑ, наÑкÑлÑки Ð²Ð°Ð¶Ð»Ð¸Ð²Ð¾Ñ Ñ ÐºÐ¾Ð½ÑепÑÑÑ Ð´Ð¾ÑÑжноÑÑÑ.
ÐÑевидно, Ñо Ðван Ñ Ðнна вÑе Ñе повâÑзанÑ, обидва маÑÑÑ Ð²Ñ ÑÐ´Ð½Ñ Ð¿Ð¾ÑиланнÑ. Ðле ÑÑого недоÑÑаÑнÑо.
ÐолиÑнÑй обâÑÐºÑ "family" бÑло вÑдâÑднано вÑд коÑенÑ, бÑлÑÑе на нÑого Ð½ÐµÐ¼Ð°Ñ Ð¿Ð¾ÑиланнÑ, ÑÐ¾Ð¼Ñ Ð²ÐµÑÑ âоÑÑÑÑвâ ÑÑÐ°Ñ Ð½ÐµÐ´Ð¾ÑÑжним Ñ Ð±Ñде видалений.
ÐнÑÑÑÑÑÐ½Ñ Ð°Ð»Ð³Ð¾ÑиÑми
ÐÑновний алгоÑиÑм збиÑÐ°Ð½Ð½Ñ ÑмÑÑÑÑ Ð½Ð°Ð·Ð¸Ð²Ð°ÑÑÑÑÑ âпознаÑÐµÐ½Ð½Ñ Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñâ (англ. âmark-and-sweepâ).
ÐазвиÑай виконÑÑÑÑÑÑ ÑÐ°ÐºÑ ÐµÑапи âзбиÑÐ°Ð½Ð½Ñ ÑмÑÑÑÑâ:
- ÐбиÑÐ°Ð½Ð½Ñ ÑмÑÑÑÑ ÑозпоÑинаÑÑÑÑÑ Ð· коÑенÑв, ÑÐºÑ Ð¿Ð¾Ð·Ð½Ð°ÑаÑÑÑÑÑ (запамâÑÑовÑÑÑÑÑÑ) оÑобливим Ñином.
- ÐоÑÑм познаÑаÑÑÑÑÑ Ð²ÑÑ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð²Ñд Ð½Ð¸Ñ .
- ÐоÑÑм вÑн вÑдвÑдÑÑ Ð¿Ð¾Ð·Ð½Ð°ÑÐµÐ½Ñ Ð¾Ð±âÑкÑи Ñа познаÑÐ°Ñ ÑнÑÑ Ð¾Ð±âÑкÑи на ÑÐºÑ Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð²Ñд Ð½Ð¸Ñ . УÑÑ Ð²ÑдвÑÐ´Ð°Ð½Ñ Ð¾Ð±âÑкÑи запамâÑÑовÑÑÑÑÑÑ, Ñоб Ñ Ð¼Ð°Ð¹Ð±ÑÑнÑÐ¾Ð¼Ñ Ð½Ðµ вÑдвÑдÑваÑи один Ñ Ñой же обâÑÐºÑ Ð´Ð²ÑÑÑ.
- â¦Ð Ñак до ÑÐ¸Ñ Ð¿ÑÑ, поки не бÑдÑÑÑ Ð²ÑдвÑÐ´Ð°Ð½Ñ ÑÑÑ Ð´Ð¾ÑÑÐ¶Ð½Ñ (з коÑенÑв) поÑиланнÑ.
- УÑÑ Ð¾Ð±âÑкÑи, кÑÑм познаÑÐµÐ½Ð¸Ñ , видалÑÑÑÑÑÑ.
ÐапÑиклад, Ð½ÐµÑ Ð°Ð¹ наÑа ÑÑÑÑкÑÑÑа обâÑкÑÑв виглÑдаÑиме Ñак:
ÐÑавоÑÑÑ Ð¼Ð¸ ÑÑÑко баÑимо âнедоÑÑжний оÑÑÑÑвâ. Ð¢ÐµÐ¿ÐµÑ Ð¿Ð¾Ð´Ð¸Ð²ÑмоÑÑ, Ñк збиÑÐ°Ð½Ð½Ñ ÑмÑÑÑÑ âпознаÑÐ°Ñ Ñ Ð²Ð¸Ð´Ð°Ð»ÑÑâ.
ÐеÑÑий кÑок познаÑÐ°Ñ ÐºÐ¾ÑенÑ:
ÐоÑÑм познаÑаÑÑÑÑÑ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð²Ñд Ð½Ð¸Ñ :
â¦Ð поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð²Ñд Ð½Ð¸Ñ , поки Ñе можливо:
Ð¢ÐµÐ¿ÐµÑ Ð¾Ð±âÑкÑи, ÑÐºÑ Ð½Ðµ вдалоÑÑ Ð²ÑдвÑдаÑи в пÑоÑеÑÑ, вважаÑÑÑÑÑ Ð½ÐµÐ´Ð¾ÑÑжними Ñа бÑдÑÑÑ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ñ:
Ðи Ñакож можемо ÑÑвиÑи ÑÐ¾Ð±Ñ Ñей пÑоÑеÑ, Ñк Ð²Ð¸Ð»Ð¸Ð²Ð°Ð½Ð½Ñ Ð²ÐµÐ»Ð¸ÐºÐ¾Ð³Ð¾ вÑдÑа ÑаÑби поÑинаÑÑи з коÑенÑв, ÑаÑба пÑоÑÑÐºÐ°Ñ ÑеÑез ÑÑÑ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ Ð¿Ð¾Ð·Ð½Ð°ÑÐ°Ñ Ð²ÑÑ Ð¾Ð±âÑкÑи, до ÑÐºÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð° дÑÑÑаÑиÑÑ. ÐоÑÑм непознаÑÐµÐ½Ñ Ð¾Ð±âÑкÑи видалÑÑÑÑÑÑ.
Це конÑепÑÑÑ Ñого, Ñк пÑаÑÑÑ Ð·Ð±Ð¸ÑÐ°Ð½Ð½Ñ ÑмÑÑÑÑ. Ð ÑÑÑй JavaScript заÑÑоÑовÑÑ Ð±Ð°Ð³Ð°Ñо опÑимÑзаÑÑй, Ñоб пÑиÑкоÑиÑи Ñе Ñа не додаÑи заÑÑимок пÑи Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð´Ñ.
ÐеÑÐºÑ Ð· опÑимÑзаÑÑй:
- ÐбÑÑка поколÑÐ½Ñ (Generational collection) â обâÑкÑи подÑлÑÑÑÑÑÑ Ð½Ð° два набоÑи: âновÑâ Ñа âÑÑаÑÑâ. ÐагаÑо обâÑкÑÑв маÑÑÑ ÐºÐ¾ÑоÑкий ÑеÑмÑн ÑлÑжби, вони зâÑвлÑÑÑÑÑÑ, виконÑÑÑÑ ÑÐ²Ð¾Ñ ÑобоÑÑ Ñ Ñвидко ÑÑаÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑÑбними. Ð¢Ð¾Ð¼Ñ Ð¼Ð°Ñ ÑÐµÐ½Ñ Ð²ÑдÑÑежÑваÑи Ð½Ð¾Ð²Ñ Ð¾Ð±âÑкÑи Ñа оÑиÑаÑи вÑд Ð½Ð¸Ñ Ð¿Ð°Ð¼âÑÑÑ, ÑкÑо Ñе Ñак. ТÑ, Ñо викоÑиÑÑовÑÑÑÑÑÑ Ð´Ð¾ÑиÑÑ Ð´Ð¾Ð²Ð³Ð¾, ÑÑаÑÑÑ âÑÑаÑимиâ Ñ Ð¾Ð³Ð»ÑдаÑÑÑÑÑ ÑÑдÑе.
- ÐнкÑеменÑний збÑÑ (Incremental collection) â ÑкÑо обâÑкÑÑв багаÑо, Ñ Ð¼Ð¸ намагаÑмоÑÑ Ð¿ÑойÑиÑÑ Ñ Ð¿Ð¾Ð·Ð½Ð°ÑиÑи веÑÑ Ð½Ð°Ð±ÑÑ Ð¾Ð±âÑкÑÑв одноÑаÑно, Ñе може зайнÑÑи деÑкий ÑÐ°Ñ Ñ Ð²Ð²ÐµÑÑи Ð²Ð¸Ð´Ð¸Ð¼Ñ Ð·Ð°ÑÑимки Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ. Ð¢Ð¾Ð¼Ñ ÑÑÑÑй намагаÑÑÑÑÑ ÑоздÑлиÑи збиÑÐ°Ð½Ð½Ñ ÑмÑÑÑÑ Ð½Ð° ÑаÑÑини. ÐоÑÑм ÑаÑÑини виконÑÑÑÑÑÑ Ð¿Ð¾ однÑй, окÑемо. Таким Ñином вÑдбÑваÑÑÑÑÑ Ð±Ð°Ð³Ð°Ñо дÑÑÐ±Ð½Ð¸Ñ Ð·Ð±Ð¾ÑÑв ÑмÑÑÑÑ Ð·Ð°Ð¼ÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ великого. Це Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ Ð´Ð¾Ð´Ð°Ñкового облÑÐºÑ Ð¼Ñж ними Ð´Ð»Ñ Ð²ÑдÑÑÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð¼Ñн, але ми маÑмо багаÑо маленÑÐºÐ¸Ñ Ð·Ð°ÑÑимок замÑÑÑÑ Ð¾Ð´Ð½ÑÑÑ Ð²ÐµÐ»Ð¸ÐºÐ¾Ñ.
- ÐбÑÑ Ð¿Ñд ÑÐ°Ñ Ð¿ÑоÑÑÐ¾Ñ (Idle-time collection) â зазвиÑай збиÑÐ°Ð½Ð½Ñ ÑмÑÑÑÑ Ð¿ÑаÑÑÑ Ð»Ð¸Ñе пÑд ÑÐ°Ñ Ð¿ÑоÑÑÐ¾Ñ Ð¿ÑоÑеÑоÑа, Ñоб зменÑиÑи можливий вплив на виконаннÑ.
ÐÑнÑÑÑÑ Ð¹ ÑнÑÑ Ð¾Ð¿ÑимÑзаÑÑÑ Ñа ваÑÑанÑи алгоÑиÑмÑв збиÑÐ°Ð½Ð½Ñ ÑмÑÑÑÑ. Ðле Ñк би нам не Ñ Ð¾ÑÑлоÑÑ Ð¾Ð¿Ð¸ÑаÑи ÑÑ ÑÑÑ, ми Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ ÑÑÑимаÑиÑÑ Ð²Ñд ÑÑого, ÑÐ¾Ð¼Ñ Ñо ÑÑÐ·Ð½Ñ ÑнÑеÑпÑеÑаÑоÑи JavaScript заÑÑоÑовÑÑÑÑ ÑÑÐ·Ð½Ñ Ð¿Ñийоми Ñа Ñ Ð¸ÑÑоÑÑ. Ð, Ñо Ñе важливÑÑе, вÑе змÑнÑÑÑÑÑÑ Ð² мÑÑÑ ÑозвиÑÐºÑ ÑнÑеÑпÑеÑаÑоÑÑв, ÑÐ¾Ð¼Ñ Ð³Ð»Ð¸Ð±Ñе вивÑÐµÐ½Ð½Ñ âзаздалегÑдÑâ без ÑеалÑÐ½Ð¾Ñ Ð¿Ð¾ÑÑеби, ймовÑÑно, не ваÑÑо Ñого. ЯкÑо, звиÑайно, Ñе не пиÑÐ°Ð½Ð½Ñ ÑиÑÑого ÑнÑеÑеÑÑ, нижÑе Ð´Ð»Ñ Ð²Ð°Ñ Ð±ÑдÑÑÑ Ð´ÐµÑÐºÑ Ð¿Ð¾ÑиланнÑ.
ÐÑдÑÑмки
ÐÑновне, Ñо поÑÑÑбно знаÑи:
- ÐбиÑÐ°Ð½Ð½Ñ ÑмÑÑÑÑ Ð·Ð´ÑйÑнÑÑÑÑÑÑ Ð°Ð²ÑомаÑиÑно. Ðи не можемо пÑимÑÑиÑи або запобÑгÑи ÑÑомÑ.
- ÐбâÑкÑи збеÑÑгаÑÑÑÑÑ Ð² памâÑÑÑ, поки вони доÑÑжнÑ.
- ÐоÑÐ¸Ð»Ð°Ð½Ð½Ñ â Ñе не Ñе ж Ñаме, Ñо бÑÑи доÑÑжним (з коÑенÑ): декÑлÑка взаÑмоповâÑÐ·Ð°Ð½Ð¸Ñ Ð¾Ð±âÑкÑÑв можÑÑÑ ÑÑаÑи недоÑÑжними ÑÑÑ Ñазом. Ðи ÑозÑбÑали Ñе в пÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð²Ð¸Ñе.
СÑÑаÑÐ½Ñ ÑÑÑÑÑ ÑеалÑзÑÑÑÑ Ð¿ÐµÑÐµÐ´Ð¾Ð²Ñ Ð°Ð»Ð³Ð¾ÑиÑми збиÑÐ°Ð½Ð½Ñ ÑмÑÑÑÑ.
ÐеÑÐºÑ Ð· Ð½Ð¸Ñ Ð²Ð¸ÑвÑÑÐ»ÐµÐ½Ñ Ð² ÐºÐ½Ð¸Ð·Ñ âThe Garbage Collection Handbook: The Art of Automatic Memory Managementâ (R. Jones et al).
ЯкÑо ви Ð·Ð½Ð°Ð¹Ð¾Ð¼Ñ Ð· низÑкоÑÑвневим пÑогÑамÑваннÑм, бÑлÑÑ Ð´ÐµÑалÑна ÑнÑоÑмаÑÑÑ Ð¿Ñо збиÑÐ°Ð½Ð½Ñ ÑмÑÑÑÑ Ñ ÑÑÑÑÑ V8 мÑÑÑиÑÑÑÑ Ñ ÑÑаÑÑÑ A tour of V8: Garbage Collection.
V8 blog Ñакож ÑÐ°Ñ Ð²Ñд ÑаÑÑ Ð¿ÑблÑкÑÑ ÑÑаÑÑÑ Ð¿Ñо змÑни в ÑпÑавлÑÐ½Ð½Ñ Ð¿Ð°Ð¼âÑÑÑÑ. ÐÑозÑмÑло, вам Ð½ÐµÐ¾Ð±Ñ Ñдно ÑозÑмÑÑи, Ñк влаÑÑований вÑеÑÐµÐ´Ð¸Ð½Ñ ÑÑÑÑÑ V8 в ÑÑломÑ. ÐÑо Ñе ви можеÑе пÑоÑиÑаÑи Ñ Ð±Ð»Ð¾Ð·Ñ ÐÑÑеÑлава ÐгоÑова Ñкий пÑаÑÑвав одним з ÑнженеÑÑв V8. Я кажÑ: âV8â, ÑÐ¾Ð¼Ñ Ñо вÑн найкÑаÑе виÑвÑÑлений ÑÑаÑÑÑми в ÐнÑеÑнеÑÑ. ÐÐ»Ñ ÑнÑÐ¸Ñ ÑнÑеÑпÑеÑаÑоÑÑв деÑÐºÑ Ð¿ÑÐ´Ñ Ð¾Ð´Ð¸ ÑÑ Ð¾Ð¶Ñ, але збиÑÐ°Ð½Ð½Ñ ÑмÑÑÑÑ Ð²ÑдÑÑзнÑÑÑÑÑÑ Ð² багаÑÑÐ¾Ñ Ð°ÑпекÑÐ°Ñ .
Ðлибоке ÑозÑмÑÐ½Ð½Ñ ÑобоÑи ÑнÑеÑпÑеÑаÑоÑÑв Ð½ÐµÐ¾Ð±Ñ Ñдно, коли вам поÑÑÑÐ±Ð½Ñ Ð½Ð¸Ð·ÑкоÑÑÐ²Ð½ÐµÐ²Ñ Ð¾Ð¿ÑимÑзаÑÑÑ. ÐÑло б ÑозÑмно планÑваÑи ÑÑ Ð²Ð¸Ð²ÑÐµÐ½Ð½Ñ ÑÑлÑки Ñк наÑÑÑпний кÑок пÑÑÐ»Ñ Ð²Ð¸Ð²ÑÐµÐ½Ð½Ñ Ð¼Ð¾Ð²Ð¸ JavaScript.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)