לדלג לתוכן

7.5 איסוף זבל תרגול

מחיקה ידנית

  • כתבו קוד שיוצר 5 אובייקטים מסוג מחלקה שתגדירו בעצמכם.
  • מחקו כל אחד מהם ידנית עם del אחרי השימוש בו.
  • בונוס: הוסיפו מתודת __del__ למחלקה שמדפיסה הודעה כשאובייקט נמחק, כך שתוכלו לראות מתי הGarbage Collector מוחק אותו.

מציאת דליפת זכרון

  • הקוד הבא עלול ליצור memory leak. מצאו היכן ולמה, ותקנו אותו.
    cache = []
    
    def process_user_request(user_id: int, data: dict) -> dict:
        result = {"user_id": user_id, "processed": data}
        cache.append(result)
        return result
    
    for i in range(10000):
        process_user_request(i, {"value": i * 2})
    

שאלות הבנה

  • ענו בכתב:
    1. מה ההבדל בין זכרון (RAM) לאחסון (storage)? מתי כל אחד מהם בשימוש?
    2. מדוע Garbage Collector לא תמיד מספיק? מתי יכולה להיווצר דליפת זכרון למרות שיש GC?
    3. מה יקרה אם לא נשחרר זכרון בתוכנה גדולה לאורך זמן?