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

תוכן שנמחק תוכן שנוסף
EmausBot (שיחה | תרומות)
מ r2.7.2+) (בוט משנה: uk:Збирання сміття
מ בוט החלפות
שורה 4:
המנגון הומצא ויושם לראשונה בשנת 1959 על ידי ג'ון מקארתי עבור שפת [[Lisp]].{{הערה| ג'ון מקארתי, [http://www-formal.stanford.edu/jmc/history/lisp.ps History Of Lisp], אוניברסיטת [[סטנפורד]], 1979}} איסוף זבל נפוץ בשפות תכנות [[תכנות מונחה-עצמים|מונחות-עצמים]] מודרניות כגון [[Java]] ו-[[C Sharp|#C{{כ}}]], וכן בשפות המורצות על ידי [[מפרש (תוכנה)|מפרש]] כמו [[Perl]], {{כ}}[[פייתון (שפת תכנות)|פייתון]], {{כ}}[[PHP]] ו-[[JavaScript]]. יש שפות כגון [[עדה (שפת תכנות)|עדה]] ו[[D (שפת תכנות)|שפת D]] (ובמידה מסוימת גם [[דלפי (שפת תכנות)|Delphi]]) המאפשרות למתכנת לבחור אם להשתמש במנגנון זה או לנהל הקצאות ושחרור זיכרון באופן עצמאי. התקן החדש של שפת [[C++|++C]],{{כ}} C++11, כולל תמיכה מוגבלת באיסוף זבל.
 
בהקשר הנוכחי, "זבל" הוא אובייקט שהזיכרון אותו הוא תופס [[הקצאת זיכרון דינמית|הוקצה באופן דינמי]], אך לא ניתן להתייחס אליו דרך אף מזהה הנגיש בתכניתבתוכנית, ולכן לא ניתן להגיע אליו. מצב בו חלק מאותם אובייקטים שאין בהם צורך לא נמחקים מכונה "[[דליפת זיכרון]]" (Memory leak) ועלול להביא למצב בו משאבי הזיכרון שהתוכנית משתמשת בהם הולכים וגדלים ובסופו של דבר אף לקריסה (הפסקת ריצה) של התכניתהתוכנית.
 
איסוף זבל חוסך מן המתכנת את המעקב אחר אובייקטים להם הקצה זיכרון במהלך התוכנית ואת הצורך לשחרר את הזיכרון בצורה תקינה עם סיום השימוש בהם. כמו כן מונע שגיאות זמן ריצה הנובעות מניסיון לשחרר זיכרון שלא הוקצה. באופן עקרוני, יש קושי עצום להגדיר שפת תכנות המכילה רפרנסים (או מצביעים) כך שתהיה בעלת [[טיפוסיות]] חזקה ובטוחה, אם היא הכוללת שחרור זיכרון מפורש (במקום איסוף זבל){{הערה|Benjamin C. Pierce, Types and Programming Languages, pg. 158}}.
שורה 22:
 
===סימון ומחיקה===
טכניקה אחת, הקרויה "סימון ומחיקה" (Mark and sweep). בשיטה זו, אחת לכמה זמן מתעורר תהליך שעובר על האובייקטים שנמצאים בשימוש כרגע (בשפות תכנות בדרך כלל מדובר באובייקטים סטטיים וגלובליים ואובייקטים במחסנית). התהליך רץ על כל ההצבעות מהם אל אובייקטים הנמצאים בזיכרון באיזורבאזור הערימה (heap) המכיל אובייקטים שהוקצו דינמית, ומסמן את כל האובייקטים שעבר דרכם כאובייקטים בשימוש. לבסוף, כל האובייקטים שאינם מסומנים נמחקים.
 
היתרונות העיקריים של שיטה זו: