איסוף זבל (מדעי המחשב) – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
"מפרש" ולא "פרשן" (למה?)
Yonidebot (שיחה | תרומות)
מ בוט החלפות: מסוים; על ידי ; תכנות;
שורה 2:
'''איסוף זבל''' (באנגלית: '''Garbage collection''') הוא תהליך שבו סביבת הריצה של [[תוכנית מחשב]] מנקה מה[[זיכרון מחשב|זיכרון]] את ה[[אובייקט (הנדסת תוכנה)|אובייקטים]] שאין בהם עוד צורך.
 
המנגון הומצא ויושם לראשונה בשנת 1959 ע"יעל ידי ג'ון מקארתי עבור שפת [[Lisp]]{{הערה| ג'ון מקארתי, [http://www-formal.stanford.edu/jmc/history/lisp.ps History Of Lisp], אוניברסיטת [[סטנפורד]], 1979}}. איסוף זבל נפוץ בשפות תיכנותתכנות [[תכנות מונחה-עצמים|מוכוונות עצמים]] מודרניות כגון [[Java]] ו [[C Sharp|#C{{כ}}]], וכן בשפות המורצות על ידי [[מפרש (תוכנה)|מפרש]] כמו [[Perl]], {{כ}}[[Python]], {{כ}}[[PHP]] ו-[[JavaScript]]. יש שפות כגון [[Ada]] ו[[D (שפת תכנות)|שפת D]] (ובמידה מסוימת גם [[דלפי (שפת תכנות)|Delphi]]) המאפשרות למתכנת לבחור אם להשתמש במנגנון זה או לנהל הקצאות ושחרור זיכרון באופן עצמאי.
 
בהקשר הנוכחי, "זבל" הוא אובייקט שהזיכרון אותו הוא תופס [[הקצאת זיכרון דינמית|הוקצה באופן דינמי]], ואין אליו אף הצבעה (באופן ישיר או עקיף) על יד אף משתנה הנמצא בשימוש, ולכן לא ניתן להגיע אליו. מצב בו חלק מאותם אובייקטים שאין בהם צורך לא נמחקים מכונה "[[דליפת זיכרון]]" (Memory leak) ועלול להביא למצב בו משאבי הזיכרון שהתוכנית משתמשת בהם הולכים וגדלים ואף לקריסה (הפסקת ריצה) של התוכנית.
 
איסוף זבל חוסך מן המתכנת את המעקב אחר אובייקטים להם הקצה זיכרון במהלך התוכנית ואת הצורך לשחרר את הזיכרון בצורה תקינה עם סיום השימוש בהם. כמו כן מונע שגיאות זמן ריצה הנובעות מניסיון לשחרר זיכרון שלא הוקצה. חסרונו הבולט הוא תוספת מסויימתמסוימת של תקורות בביצועי התוכנית בפועל, היבט משמעותי במיוחד עבור תוכניות [[זמן אמת]].
 
==יישום איסוף אוטומטי בשפות תכנות==
שורה 20:
 
===סימון ומחיקה===
טכניקה אחת, הקרויה "סימון ומחיקה" (Mark and sweep), היא הטכניקה הנפוצה ביותר בשימוש בשפות תיכנותתכנות המציעות איסוף זבל אוטומטי כגון [[Java]]{{מקור|למיטב הבנתי דווקא השיטה השנייה נפוצה יותר בשפות תכנות}}. בשיטה זו, אחת לכמה זמן מתעורר תהליך שעובר על האובייקטים שנמצאים בשימוש כרגע (בשפות תכנות בדרך כלל מדובר באובייקטים סטטיים וגלובליים ואובייקטים במחסנית). התהליך רץ על כל ההצבעות מהם אל אובייקטים אחרים בזיכרון (כלומר ב-[[ערימה|ערימה]]) ובין האובייקטים האלו לאובייקטים אחרים ומסמן את כל האובייקטים שעבר דרכם כאובייקטים בשימוש. לבסוף, כל האובייקטים שאינם מסומנים נמחקים.
 
היתרונות העיקריים של שיטה זו: