דלפות זיכרון בשפות דינמיות

אחד הדברים שתמיד מדהימים אותי מחדש זה הגילוי עד כמה אנשים בטוחים ששפה דינמית חסינה מבעיות של זיכרון, ועוד בעיות אחרות שקיימות בשפות סטטיות.

למען האמת, שפה דינמית גם יכולה להיות עם דליפת זיכרון. זה יכול להיות למשל מצב בו מנקה הזבל (במידה וקיים) אינו יודע מתי להסיר מהזיכרון משהו מסויים, אבל לפעמים אנחנו פשוט גורמים למידע מסויים להיות מאותחל כל פעם מחדש, בלי שה GC יודע שהוא צריך לשחרר את הקודם כי גם הקודם בד"כ בשימוש.

למשל גיליתי השבוע כי ברובי יצירה של Symbol (שם של מחלקה) היא סוג כזה של "בעיה". עכשיו חשוב להבין שזה feature מסויים, אבל השימושים שאנחנו עושים בו לא נכונים ולכן אנחנו מגיעים למצב בו אנחנו יוצרים יותר מפעם אחת את אותו המידע במופע (instance) חדש במקום להשתמש במופע קיים. הסיבה היא שמופע שנוצר, נשמר במערך עד אשר אנחנו מסיימים ריצה, ולכן כל פעם שניצור את אותו המידע עם מופע חדש, ניצור עוד כפילות של מידע, אבל במופע חדש. אז מצד אחד Symbol מאוד מהיר לעבודה, וזו הסיבה שאנחנו עובדים איתו, אבל מצד שני, שימוש לא נכון גורם לנו לדלוף סתם זיכרון בגלל הצורה שהוא עובד וחבל.

עוד סיבה לבעיה היא למשל השימוש במודולים חיצונים בהם יש שימוש בתוך האפליקציה, אשר יכול לדלוף זיכרון (אפילו בגלל ביצוע ה binding שעושים), ולא הספרייה עצמה.

כך שחשוב להבין כי שפה דינמית לא מגיעה חסינה מבעיות שאפשר למצוא בשפות סטטיות, וחשוב לבדוק ולהבין טוב טוב את השפה והמימוש שלה של דברים בשביל להימנע מהבעיות.

להשאיר תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s