
11-07-2008, 08:31
|
|
|
|
חבר מתאריך: 23.11.07
הודעות: 187
|
|
תניח שהקצאת איפהשהוא בתוכנית שלך 5 אובייקטים, שנקראים object1 עד object5. נתון הקוד הבא:
קוד:
object[] objectArray = new object[] {object1, object2, object3, object4, object5};
DoSomethingWith(object1);
DoSomethingWith(object2);
object[] newObjectArray = new object[] {object3, object4, object5};
במצב כזה ישתחרר הזיכרון עבור אובייקט המערך objectArray, אבל הזיכרון עבור object1 ו-object2 ישאר, כי יש reference אליהם מתוך המתודה DoSomethingWith. יוקצה גם זיכרון חדש עבור האובייקט newObjectArray, וממנו יהיה reference ל-object3 עד object5 כך שגם הם לא ישתחררו.
שים לב אבל, שעצם זה שאין reference לאובייקט כלשהוא לא מחייב שה-GC ירוץ מיידי - זה ההבדל המהותי בין מה שאתה מכיר מ-++C ל-NET. רק מתי שיהיה לחץ במשאבי הזיכרון הזמין ה-CLR יחליט להריץ את ה-GC ולהיפטר מהאובייקטים האלה. בהחלט יכול להיות, לדוגמא, שבתוכנית הנ'ל לא ירוץ GC בשום שלב, ולכן לא ישתחרר זיכרון בכלל למרות שיש אובייקטים שאפשר להיפטר מהם.
|