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

תוכן שנמחק תוכן שנוסף
Naorz (שיחה | תרומות)
אין תקציר עריכה
מניית התייחסות דווקא נפוצה, למרות שלא משתמשים בה בג'אווה
שורה 6:
בהקשר הנוכחי, "זבל" הוא אובייקט שהזיכרון אותו הוא תופס [[הקצאת זיכרון דינמית|הוקצה באופן דינמי]], ואין אליו אף הצבעה (באופן ישיר או עקיף) על יד אף משתנה הנמצא בשימוש, ולכן לא ניתן להגיע אליו. מצב בו חלק מאותם אובייקטים שאין בהם צורך לא נמחקים מכונה "[[דליפת זיכרון]]" (Memory leak) ועלול להביא למצב בו משאבי הזיכרון שהתוכנית משתמשת בהם הולכים וגדלים ואף לקריסה (הפסקת ריצה) של התוכנית.
 
חוזקו של איסוף זבל בכך שהוא משחרר את המתכנת ממעקב אחרי אובייקטים להם הקצה זיכרון במהלך התוכנית והצורךומהצורך לשחרר את הזיכרון בצורה תקינה עם סיום השימוש בהם. כמו כן מונע שגיאות של נסיונות לשיחרור זיכרון שלא הוקצה. חסרונו הבולט הוא תוספת מסויימת של תקורות בביצועי התוכנית בפועל, היבט משמעותי במיוחד עבור תוכניות [[זמן אמת]].
 
==יישום איסוף אוטומטי בשפות תכנות==
שורה 20:
 
===סימון ומחיקה===
טכניקה אחת, הקרויה "סימון ומחיקה" (Mark and sweep), היא הטכניקה הנפוצה ביותר בשימוש בשפות תיכנות המציעות איסוף זבל אוטומטי כגון [[Java]]{{מקור|למיטב הבנתי דווקא השיטה השנייה נפוצה יותר בשפות תכנות}}. בשיטה זו, אחת לכמה זמן מתעורר תהליך שעובר על האובייקטים שנמצאים בשימוש כרגע (בשפות תכנות בדרך כלל מדובר באובייקטים סטטיים וגלובליים ואובייקטים במחסנית). התהליך רץ על כל ההצבעות מהם אל אובייקטים אחרים בזיכרון (כלומר ב-[[ערימה|ערימה]]) ובין האובייקטים האלו לאובייקטים אחרים ומסמן את כל האובייקטים שעבר דרכם כאובייקטים בשימוש. לבסוף, כל האובייקטים שאינם מסומנים נמחקים.
 
היתרונות העיקריים של שיטה זו:
שורה 33:
===מניית התייחסויות===
 
טכניקה נוספת קרויה "מניית התייחסויות" ('''Reference counting'''), מבוססת על כך שלכל אובייקט יש מונה הסופר את מספר המצביעים שמתייחסים אליו. ברגע שמספר ההתייחסויות יורד ל-0, האובייקט מוחק את עצמו באופן אוטומטי.
 
היתרונות של שיטה זו:
שורה 39:
# אין צורך בהרצת תהליך המעכב את ריצת התוכנית
# יעיל יותר כאשר ישנו מספר רב של אובייקטים בזיכרון
# פשוטה למימוש.
# מאוד קל למימוש בשפת [[C Plus Plus|++C]] באמצעות מצביעים חכמים.
 
החסרונות של שיטה זו:
שורה 45:
# פחות יעיל מבחינת זיכרון בשל הצורך להחזיק מונה התייחסויות עבור כל אובייקט.
# יש צורך לשנות את ערכו של המונה בכל פעם שמוסיפים או מוחקים מצביע המתייחס לאותו האובייקט.
 
בשל פשטותה היא נמצאת בשימוש במספר רב של שפות, כגון המימושים המקובלים ל-LISP, [[פרל]], [[פייתון]], ועוד{{מקור}}.
 
==איסוף זבל ב-[[.NET]] ו[[Java]]==